可以在List <myclass> list = new ArrayList&lt;&gt;(); </myclass>中添加哪些对象

时间:2014-05-30 19:22:18

标签: java

我试图理解类型推断和钻石算子的使用。

假设RaceCarCar的子类,它是Vehicle的子类,可以将哪种对象添加到以下集合中?

List<Car> list = new ArrayList<>();

我发现了What is the point of the diamond operator in Java 7?个问题,但仍然没有得到它。

提前谢谢!

LE:了解继承在这种情况下的工作方式非常重要

2 个答案:

答案 0 :(得分:2)

您可以添加CarCar的任何子类。但是没有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类的任何子类。