[英]Java Generics and Raw Types
我有下一个代码:
ArrayList value = new ArrayList<Integer>(); // 1
value.add("Test"); // 2
我正在尝试理解第2行。虽然我可以看到value.add("Test");
编译没有错误,我看不出它不抛出运行时异常的原因。 如果value
引用了一个通用的ArrayList
对象,为什么Java允许向它添加一个String
? 有谁可以向我解释一下?
我在这里描述了我发现的最接近的解释,但我仍然不明白核心原因:
Stack s = new Stack<Integer>()
这是从参数化类型到原始类型的合法转换。 您将能够推动任何类型的价值。 但是,任何此类操作都将导致“未经检查的呼叫”警告。
ArrayList value
这是你的类型声明,它不是通用的。 这就是为什么编译器允许您将任何对象添加到列表中的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.