Я пытаюсь изучить Java Generics и нашел следующий код.Ошибки возникают при вызове печати (список <T> a, T b) с другим классом T
public static <T> void print(T a, T b){
System.out.println(a);
System.out.println(b);
}
public static void main(String[] args){
print(new ArrayList<String>(), 1);
}
который работает без проблем.
Однако, когда я меняю метод print
на следующий, он дает мне компиляцию ошибок.
public static <T> void print(List<T> a, T b){
System.out.println(a);
System.out.println(b);
}
Ошибка:
GenericTest.java:9: error: method print in class GenericTest cannot be applied to given types;
print(new ArrayList<String>(), 1);
^
required: List<T>,T
found: ArrayList<String>,int
reason: no instance(s) of type variable(s) T exist so that argument type int conforms to formal parameter type T
where T is a type-variable:
T extends Object declared in method <T>print(List<T>,T)
1 error
Может кто-нибудь помочь мне понять ошибки?
Можете ли вы объяснить, почему он решил 'Serializable' и не какой-либо другой общий супер тип? – Codebender
@Codebender Поскольку это ближайший общий супер-тип между 'ArrayList' и' Integer'. «Объект» будет на один уровень выше в иерархии. – Tunaki
Я не понимаю, как иерархия формируется между интерфейсом и классом (я задам новый вопрос об этом), но eclipse показывает, что он разрешен для Serializable (+1 для этого) ... – Codebender