Java Generics: вернуть тип другого типа - PullRequest
1 голос
/ 22 апреля 2019

Это может быть возможной копией другого вопроса здесь, но я искал, но не смог получить вопрос, который хотел. Пожалуйста, укажите мне на аналогичный вопрос, если таковые имеются.

Можно ли вернуть дженерик дженерика? Вот что я имею в виду:

public <T,K> T<K> myMethod(Class<T> classT, Class<K> classK) {
   //...method implementation
}

Итак, если я вызываю этот метод с List и Integer, он должен работать следующим образом:

List<Integer> listOfIntegers = myMethod(List.class, Integer.class);

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Нельзя использовать параметр типа в качестве универсального типа.То, что вы ищете, это установить границы для вашего T типа.

Предполагая, что T используется для типа, подобного этому:

class GenericT<T> {}

Вы можете объявить свой метод какthis:

public <K, T extends GenericT<K>> T myMethod(Class<T> classT, Class<K> classK){
    //...
}

Это составляет T и экземпляр GenericT с K в качестве аргумента типа.

2 голосов
/ 22 апреля 2019

Нет, это не может работать. Чтобы написать T<K>, T должен быть конструктором с более высоким родом, но он не доступен в Java. Попытки сделать это в любом случае существуют , но они больше похожи на чисто теоретические упражнения. См. Также ответы на этот вопрос для дальнейшего обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...