Java 原始类型和类型安全
假设我有一个简单的列表,如果是整数:Java 原始类型和类型安全,java,generics,type-conversion,Java,Generics,Type Conversion,假设我有一个简单的列表,如果是整数: List<Integer> intList = new ArrayList<>(); intList.add(1); intList.add(2); // intList.add("zxc"); // this will obviously fail 打印[1,2,星期二2016年6月14日23:41:15英国夏令时],因此我的列表中现在有一个日期 现在我明白发生了什么,因为类型擦除列表你的问题是在这个声明中使用了raw类型:Lis
List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
// intList.add("zxc"); // this will obviously fail
打印[1,2,星期二2016年6月14日23:41:15英国夏令时]
,因此我的列表中现在有一个日期
现在我明白发生了什么,因为类型擦除列表你的问题是在这个声明中使用了raw类型:List我得到了一个警告。如何编译代码?这与向后兼容性有关,而不是与擦除有关。为什么很容易把一切都归咎于擦除?你的问题是类型列表中的第二个列表
。我不是在“责备”类型擦除,它按预期工作。我只是感到困惑,在这种情况下没有警告。那么,我正在将泛型类型转换为原始类型的警告在哪里呢?请注意,如果在这种情况下,ListIntellij Idea没有给我任何警告,而不是ListIntellij Idea,它会给出一个警告,但你是对的-我刚刚尝试手动编译它,它确实有警告,这是有意义的。所以我猜Idea设置中的某个模糊标志是未设置的,尽管我找不到位置。这很奇怪。
List<List<Integer>> listOfListOfInt = new ArrayList<>();
listOfListOfInt.add(intList);
private static void method1(List<? extends List> cont) { // [1]
List<? super Date> data = cont.get(0); // [2]
data.add(new Date());
}
method1(listOfListOfInt);
System.out.println(intList);
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
intList.add(1);
intList.add(2);
List<List<Integer>> listOfListOfInt = new ArrayList<>();
listOfListOfInt.add(intList);
method1(listOfListOfInt);
System.out.println(listOfListOfInt);
}
private static void method1(List<? extends List> cont) { // [1]
List<? super Date> data = cont.get(0); // [2]
data.add(new Date());
}
}