2014-12-19 2 views
1

Есть ли способ с генериками Java сообщить компилятору, что тип T должен быть типа U? Например.Как выразить, что тип T должен иметь тип U?

public class Whatever<T, U> { 

    T specific; 
    U moreGeneral; 

} 

Теперь я хочу, чтобы убедиться, что T является подклассом U. Есть ли способ указать это?

+0

Вы ищете [ограниченный тип параметры] (http://docs.oracle.com/javase/tutorial/java/generics/bounded. HTML). –

+1

Если ты собираешься опробовать меня, скажи, почему. это просто вежливость – jlarson

ответ

8

Просто используйте

public class Whatever<T extends U,U> 
+0

Это не сработает. Это вызовет незаконную прямую ссылку на U. – kuriouscoder

+0

Я так и думал (сначала ответил на изменение порядка), но просто попробовал, и он работает. Попробуйте сами, он компилируется в обоих направлениях (используется JDK 8) – Dici

+0

Интересно, что он не работает на моем JDK 1.5 – kuriouscoder

4

Для уточнения, следующий будет делать трюк на JDK до 1.7. При попытке переключить порядок декларации U и T я получаю illegal forward reference to type argument U. Как и в других сообщениях, это не похоже на новые версии JDK.

Согласно этому post это был зафиксирован в JDK 1.7

public class Whatever <U, T extends U> { 
    T specific; 
    U moreGeneral; 
} 
Смежные вопросы