我试图理解类型推断和钻石算子的使用。
假设RaceCar
是Car
的子类,它是Vehicle
的子类,可以将哪种对象添加到以下集合中?
List<Car> list = new ArrayList<>();
我发现了What is the point of the diamond operator in Java 7?个问题,但仍然没有得到它。
提前谢谢!
LE:了解继承在这种情况下的工作方式非常重要
答案 0 :(得分:2)
您可以添加Car
或Car
的任何子类。但是没有Car
的超类。
编辑:正如@HotLicks所提到的,你可以技术上向List
添加任何类型的对象,如果你使用了伪装,则通过强制转换。请注意,这是一种简单的方法来混淆你自己的地狱,因为你将从你的List
拉出一个对象,它会有一个意想不到的类型。
import java.util.*;
class Foo{}
class Bar extends Foo{}
class Z{}
public class FooBar2{
public static void main(String[] args) {
List<Foo> list = new ArrayList<>();
list.add(new Foo());
list.add(new Bar());
// Compile error
// list.add(new Z());
// Subterfuge
((List) list).add(new Z());
}
}
答案 1 :(得分:0)
钻石操作符只是一种语法简化改进,它带有Java 7的新功能,
在Java 6中我们写道:Map<City, Set<Person>> group=new HashMap<City, Set<Person>>();
但在java 7中我们可以写;
Map<City, Set<Person>> group=new HashMap<>();
问题&#39;可以将哪种对象添加到以下集合中&#39;例如,您可以添加Car,RaceCar类的任何子类。