【问题标题】:Why does the compiler allow me to assign a generic collection to a variable declared as a class-specific collection?为什么编译器允许我将泛型集合分配给声明为特定于类的集合的变量?
【发布时间】:2012-10-10 08:54:37
【问题描述】:

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

    ArrayList list = new ArrayList();
    // Operations on list
    ArrayList<String> stringList = list;

这可能会出现各种类型的转换错误,在我看来,如果编译器首先阻止你这样做会更有意义。

我之所以这么问只是因为我对这种语言有些奇怪的方面感到好奇,实际上我并没有让代码正常工作(尽管有一天我可能需要使用各种类型的 ArrayList其中的类)。

【问题讨论】:

标签: java generics


【解决方案1】:

它只是为了支持泛型或 java 5 之前的遗留代码。

泛型,在Java SE 5 中引入,Collection 早就开始运行了。所以如果你看到 1.5 之前的 Collection framework 你看到ArrayList,没有generic

【讨论】:

    【解决方案2】:

    由于使用原始类型(例如不带泛型参数的 ArrayList)如果不抑制会导致警告,您也可以考虑使用“-Werror”标志来“警告失败”:

    http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

    (虽然我个人还没有使用过这个标志)

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      相关资源
      最近更新 更多