Видя, что B является подклассом A, почему я могу добавить элемент типа B в список из метода print()
, но не передать список типа B этому же методу?Путаница о дженериках в java
public class Test {
private static void print(List<A> list) {
list.add(new B());
}
public static void main(String[] args) {
List<B> list = new ArrayList<>();
list.add(new B());
print(list); //does not compile
}
}
class A {}
class B extends A {}
class C extends B {}
Но вы могли бы объявить 'void print (List super B>)', и это сработает. –
@ AndyTurner, да, вы могли бы это сделать. но тогда это может усложниться, если вы хотите использовать экземпляр 'C'. конечно, предполагая, что он не предназначен (т. е. изолирует B) – nafas