为什么编译器允许我将一个泛型集合分配给声明为特定于类的集合的变量?

Gar*_*een 4 java generics

我无法理解为什么java编译器允许为非特定集合分配已指定变量的集合.像这样:

    ArrayList list = new ArrayList();
    // Operations on list
    ArrayList<String> stringList = list;
Run Code Online (Sandbox Code Playgroud)

在这种情况下可能存在各种类型的转换错误,在我看来,如果编译器阻止你首先执行此操作会更有意义.

我只是问,因为我很好奇这个语言的这个有点奇怪的方面,我实际上并没有让代码工作有困难(虽然我可能有一天我需要使用一个包含各种类的ArrayList它).

Sub*_*der 6

它仅用于在泛型或java 5之前支持遗留代码.

Generics,介绍Java SE 5和收集已经运行很久以来.因此,如果您在1.5之前看到Collection框架,则会看到ArrayList,但是没有generic.