What does “Static factories returned object need not exist” mean?
up vote
4
down vote
favorite
While reading "Effective Java" J.Bloch came across this statement
A fifth advantage of static factories is that the class of the returned object need not exist when the class containing the method is written.
What does it mean? Can someone explain it with some examples ?
java
add a comment |
up vote
4
down vote
favorite
While reading "Effective Java" J.Bloch came across this statement
A fifth advantage of static factories is that the class of the returned object need not exist when the class containing the method is written.
What does it mean? Can someone explain it with some examples ?
java
add a comment |
up vote
4
down vote
favorite
up vote
4
down vote
favorite
While reading "Effective Java" J.Bloch came across this statement
A fifth advantage of static factories is that the class of the returned object need not exist when the class containing the method is written.
What does it mean? Can someone explain it with some examples ?
java
While reading "Effective Java" J.Bloch came across this statement
A fifth advantage of static factories is that the class of the returned object need not exist when the class containing the method is written.
What does it mean? Can someone explain it with some examples ?
java
java
edited Nov 10 at 15:53
Koray Tugay
8,61926111218
8,61926111218
asked Nov 10 at 15:50
gg ff
235
235
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
2
down vote
accepted
It means that the API of your static factory method can return an interface type, of which the implementation won't be written or generated until later.
As an example:
public static MyInterface getMyInterfaceInstance()
//load instance dynamically and return it.
In this case, the factory method only needs the MyInterface
interface to exist when it's being compiled. The actual implementation can be loaded dynamically at runtime in many ways, including:
- Creating a proxy object
- Reflection (configurable implementation class name loaded at runtime)
- Looking up a service loader
In particular, the last two options simply mean that the implementation class can be written in a different module (and many modules can provide an implementation of the interface), and these implementation classes will be discovered at runtime - which makes it possible for the static factory method to be written before the actual implementation class.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
2
down vote
accepted
It means that the API of your static factory method can return an interface type, of which the implementation won't be written or generated until later.
As an example:
public static MyInterface getMyInterfaceInstance()
//load instance dynamically and return it.
In this case, the factory method only needs the MyInterface
interface to exist when it's being compiled. The actual implementation can be loaded dynamically at runtime in many ways, including:
- Creating a proxy object
- Reflection (configurable implementation class name loaded at runtime)
- Looking up a service loader
In particular, the last two options simply mean that the implementation class can be written in a different module (and many modules can provide an implementation of the interface), and these implementation classes will be discovered at runtime - which makes it possible for the static factory method to be written before the actual implementation class.
add a comment |
up vote
2
down vote
accepted
It means that the API of your static factory method can return an interface type, of which the implementation won't be written or generated until later.
As an example:
public static MyInterface getMyInterfaceInstance()
//load instance dynamically and return it.
In this case, the factory method only needs the MyInterface
interface to exist when it's being compiled. The actual implementation can be loaded dynamically at runtime in many ways, including:
- Creating a proxy object
- Reflection (configurable implementation class name loaded at runtime)
- Looking up a service loader
In particular, the last two options simply mean that the implementation class can be written in a different module (and many modules can provide an implementation of the interface), and these implementation classes will be discovered at runtime - which makes it possible for the static factory method to be written before the actual implementation class.
add a comment |
up vote
2
down vote
accepted
up vote
2
down vote
accepted
It means that the API of your static factory method can return an interface type, of which the implementation won't be written or generated until later.
As an example:
public static MyInterface getMyInterfaceInstance()
//load instance dynamically and return it.
In this case, the factory method only needs the MyInterface
interface to exist when it's being compiled. The actual implementation can be loaded dynamically at runtime in many ways, including:
- Creating a proxy object
- Reflection (configurable implementation class name loaded at runtime)
- Looking up a service loader
In particular, the last two options simply mean that the implementation class can be written in a different module (and many modules can provide an implementation of the interface), and these implementation classes will be discovered at runtime - which makes it possible for the static factory method to be written before the actual implementation class.
It means that the API of your static factory method can return an interface type, of which the implementation won't be written or generated until later.
As an example:
public static MyInterface getMyInterfaceInstance()
//load instance dynamically and return it.
In this case, the factory method only needs the MyInterface
interface to exist when it's being compiled. The actual implementation can be loaded dynamically at runtime in many ways, including:
- Creating a proxy object
- Reflection (configurable implementation class name loaded at runtime)
- Looking up a service loader
In particular, the last two options simply mean that the implementation class can be written in a different module (and many modules can provide an implementation of the interface), and these implementation classes will be discovered at runtime - which makes it possible for the static factory method to be written before the actual implementation class.
answered Nov 10 at 16:10
ernest_k
18.6k41838
18.6k41838
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240626%2fwhat-does-static-factories-returned-object-need-not-exist-mean%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown