Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is a new object that's created in a static property getter only created once?

I'm creating a static helper class for web services I'm writing. I'm tapping into the API of Telligent and therefore creating these Telligent "service" objects that allow me to do things with the platform. For example, I'm creating a MembershipSerice object in my helper class so I can do membership stuff with the same object. In my helper class I have a property with a getter that creates a new one of these objects:

private static MembershipService _MembershipService {
  get {
    return new MembershipService(path, usr, pwd);
  }
}

And then I have a method that returns that property:

public MembershipService getMembershipService() {
  return _MembershipService;
}

Does that mean since the property is static that the new object created in the getter is only created once? Also, in terms of coding style, would it just be better to make the property public and therefore the method would be unnecessary.

Or... would it be better to just create the object as a private variable and return it via the public method:

private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd);
public MembershipService getMembershipService() {
  return _mbrSvc;
}

// then called elsewhere by me via:
MembershipService svc = MyHelperClass.getMembershipService();

If you have any thoughts on the style of how I set this up so its efficient and performs well, please let me know.

like image 531
Mark Ursino Avatar asked Jan 11 '10 15:01

Mark Ursino


1 Answers

Does that mean since the property is static that the new object created in the getter is only created once?

No, because you have

new MembershipService(path, usr, pwd);

inside the getter, regardless of _MembershipService being declared static a new instance will be created on every invocation. All that static means in this context is that you can invoke the method without having an instance of the defining class.

As far as commenting on the style, well, it really depends on what you want to do. Do you want a single instance? If so, create a static member variable _mbrSvc and return that from the getter:

private static MembershipService _mbrSvc = new MembershipService(path, usr, pwd);
private static MembershipService _MembershipService {
    get {
        return _mbrSvc;
    }
}

Otherwise, as it is is fine.

like image 61
jason Avatar answered Sep 28 '22 00:09

jason