原始类型和数据完整性列表

时间:2013-06-23 12:35:53

标签: java generics arraylist

在这个例子中

public static void main(String[] args) {

    List<Integer> integers = new ArrayList<Integer>();
    integers.add(1);
    addToList(integers);
    System.out.println(integers);
}


public static void addToList(List list0){
    list0.add("blabl");
}

这会编译并打印结果

  

[1,blabl]

我的理解是:

引用变量'integers'具有arraylist对象的地址(比如111),该地址被传递给addToList方法。因此在addToList方法中,list0指向具有该对象的同一地址(这是一个Integer类型的arraylist),并且将一个字符串添加到此arraylist对象中。

如何将String添加到Integer类型的arraylist?这不是数据完整性问题吗?

更新

以下答案和this答案有帮助。感谢。

1 个答案:

答案 0 :(得分:6)

这是Type Erasure的典型示例。在Java中,泛型在编译时被删除,并被强制替换。

这意味着您可以这样做,但是当您执行此操作时,您将获得ClassCastException

Integer myInt = integers.get(1);

实际上编译器应该在你这样做时发出警告,因为你在调用方法时隐式地将List<Something>强制转换为List。编译器知道它无法在编译时验证类型安全性。