Java泛型<something>

时间:2015-09-21 17:58:16

标签: java generics

我想知道&lt;&gt;。

中这两行的含义是什么
LinkedList<? extends SomeClass> x;
LinkedList<Class<?extends SomeClass>> x;

2 个答案:

答案 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的所有可能的未知子类型。由于你有操作添加,编译器拒绝给你绿灯,因为它不知道提供的对象的类型是否满足对象的未知子类型的限制。这称为协方差。