我今天遇到了一些奇怪的事情.看一下这段代码:
List <Rectangle> test1 = new LinkedList<Rectangle>();
List <Shape> test2 = test1; //Compiler Error;
Run Code Online (Sandbox Code Playgroud)
这当然是假设Rectangle类是Shape的子类.有人可以向我解释为什么这是一个错误?
你需要使用外卡.像这样:
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.
希望这可以帮助.