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());
    }
}