我是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”。 我希望它在编译时抛出一个错误。 任何关于如何非常感谢这项工作的帮助。
谢谢, 迪夫亚
答案 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会为您提供对象