我想知道<>。
中这两行的含义是什么LinkedList<? extends SomeClass> x;
LinkedList<Class<?extends SomeClass>> x;
答案 0 :(得分:3)
简而言之,它提供了额外的代码重用,并且无需进行类型转换。请参阅java跟踪以获取guide。
最简单的思考方式是将代码中的代码用作占位符,代码可以比某些特定类型更通用,因此可以更多地重复使用。
括号中的something
意味着是一个类型参数,可以替换它受约束的任何类型。如果只是something
,它可以是任何类型,但是如果您在? extends SomeClass
的问题中提供它,则它被约束为SomeClass
的类型或{{1}的任何子类1}}。
重要:SomeClass
之间提供的类型信息在运行时被删除(称为<>
),因此对其使用方式有一些限制,例如不工作:
type-erasure
其中List<Animal> animals = new ArrayList<Dog>();
是Dog
的子类。对于常规数组,这样的事情是可能的,但是在运行时仍然知道类型信息,并且放置Animal
类型之外的其他内容将导致Dog
答案 1 :(得分:0)
List<? extends Object> ls2 = new LinkedList<Number>();
这意味着编译器将允许您将集合分配给Object的所有可能的未知子类型。由于你有操作添加,编译器拒绝给你绿灯,因为它不知道提供的对象的类型是否满足对象的未知子类型的限制。这称为协方差。