Generics-Type参数如何工作?

时间:2014-07-15 13:44:29

标签: java generics

我是java中Generics的新手。  我尝试过以下方法:

Entity class:
public class Box<T> {
    private List<T> boxList;

    public List<T> getBoxList() {
        if (this.boxList == null)
            this.boxList = new ArrayList<T>();

        return this.boxList;
    }

    public void setBoxList(List<T> boxList) {
        this.boxList = boxList;
    }

}

Test class:

public class Client {
public static void main(String[] args) {
    Box box = new Box();
    box.getBoxList().add(1);
    box.getBoxList().add("one");
System.out.println(box.getBoxList());

Box boxInt=new Box<Integer>();
boxInt.getBoxList().add("apple");
System.out.println(boxInt.getBoxList());

}
}

虽然我的boxInt是Integer类型,但BoxList列表仍然接受“apple”。  我希望它在编译时抛出一个错误。   任何关于如何非常感谢这项工作的帮助。

谢谢,  迪夫亚

1 个答案:

答案 0 :(得分:6)

宣布

Box boxInt = *whatever*

Box被视为Box<Object>。因此,boxInt.add("apple")被接受。

你应该像这样声明Box

Box<Integer> boxInt=new Box<Integer>(); //Or = new Box<>(); since Java 7

您可能有兴趣阅读the oracle documentation about raw types

  

使用原始类型时,您基本上会获得pre-generics行为 - Box会为您提供对象