Java中的泛型

Sar*_*ity 2 java generics

我今天遇到了一些奇怪的事情.看一下这段代码:

List <Rectangle> test1 = new LinkedList<Rectangle>();
List <Shape> test2 = test1; //Compiler Error;
Run Code Online (Sandbox Code Playgroud)

这当然是假设Rectangle类是Shape的子类.有人可以向我解释为什么这是一个错误?

Naw*_*Man 5

你需要使用外卡.像这样:

List<Rectangle> test1 = new LinkedList<Rectangle>();
List<? extends Shape> test2 = test1;
Run Code Online (Sandbox Code Playgroud)

作为Rectangle扩展Shape.

这样做的原因是,如果test2只是List<Shape>,你会期望test2.add(..)接受任何形状,但如果允许test1(即List<Rectangle>),则不是这种情况,test1将不接受任何形状Rectangle.

希望这可以帮助.