#java #generics #containers #wildcard
#java #дженерики #контейнеры #подстановочный знак
Вопрос:
Я пытаюсь создать метод DI container get
, но у меня проблемы с подписью. В настоящее время у меня есть это определение:
public Object get(Class<?> key) {
// returns instance of `?`
}
Часть моего кода, которая мне не очень нравится, — это использование get
метода:
IRouter router = (IRouter) container.get(IRouter.class);
где я должен привести return с (IRouter)
. Есть идеи, как изменить сигнатуру метода, чтобы сделать использование подобным этому?
IRouter router = container.get(IRouter.class);
Заранее спасибо за любые идеи!
Ответ №1:
Используя метод с ограниченной областью действия, параметризованный тип :
public <T> T get(Class<T> key) {
// ...
return (T) foo;
}
Здесь, я полагаю, это foo
не вводится как T
.
Если она уже введена как T
, вы, конечно, можете вернуть ее без приведения.
Вы могли бы вызвать ее таким образом :
IRouter router = container.get(IRouter.class);
Комментарии:
1. Добро пожаловать 🙂 Я советую вам загрузить исходный код из классов Spring core. Это должно помочь вам в соответствии с вашими требованиями.
2. Да, конечно 🙂 но я просто играю с Java как разработчик PHP и пытаюсь проверить свои концепции ООП так быстро, как только могу выделить себе свободное время : D