Как улучшить шаблонную подпись Java - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь создать метод DI-контейнера 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 Ответ

0 голосов
/ 03 марта 2019

Используя параметризованный тип метода scoped:

public <T> T get(Class<T> key) {
  // ...
  return (T) foo;
}

Здесь я предполагаю, что foo не напечатано как T.
Если оно уже набрано как T, вы можетеКонечно верните это без актерского состава.

Вы можете вызвать это:

IRouter router = container.get(IRouter.class);
...