Let's consider the following example:
import java.util.Map;
import java.util.Optional;
class Scratch {
private static class UserService {
private final Map<String, String> users = Map.of(
"user1", "Max",
"user2", "Ivan",
"user3", "Leo");
public Optional<String> findUserById(String userId) {
return Optional.ofNullable(users.get(userId));
}
}
public void doJobs() {
// I need to get `userService` here, without explicitly passing it
// to execute some service method
// getUserService().findUserById("userId");
}
public void startApplication() {
UserService userService = new UserService();
doJobs();
}
public static void main(String[] args) {
Scratch program = new Scratch();
program.startApplication();
}
}
So. we have simple java application without any frameworks, like spring. I need to find UserService
object in doJobs()
method, without explicitly passing it. Obviously, it is job interview question.
There are the following task preconditions:
UserService
is not a spring bean or something like this. It is not aboutDI
- You cannot explicitly pass
UserService
object todoJobs()
method - You cannot set
UserService
object to some static/global variable/interface/method. - You cannot use javaagents.
- You know, that there is only one object of
UserService
in current class loader. - You may use any reflection (included libraries), if you wish
So, generally speaking we need to get somehow list of all objects and find needed one, using knowledge about Class name.
I did not solve this task on job interview. Could you help me to do it?
Aucun commentaire:
Enregistrer un commentaire