【问题标题】:Java: Array of List<MyClass>Java:List<MyClass> 的数组
【发布时间】:2017-01-09 23:26:10
【问题描述】:

我有一个规范,要求我传递一个列表数组。该数组的长度始终为 2。我正在使用以下内容来完成此操作:

List<MyClass> [] data = new ArrayList[2];
data[0] = new ArrayList<MyClass>();
data[1] = new ArrayList<MyClass>();

编译但给出警告:

uses unchecked or unsafe operations.

我知道 Java 中不允许使用泛型数组,但是我无法更改规范,并且上面的代码似乎运行良好。只要我意识到我永远不会将数组的元素重新分配为类型 ArrayList&lt;MyClass&gt; 以外的其他东西,我有什么理由不应该取消这个警告并继续前进吗?

【问题讨论】:

标签: java arrays list generics suppress-warnings


【解决方案1】:

在您的情况下,编译器会警告您,您的代码不会为您检查要添加到数组中的值的类型。 你可以忽略这个警告,只要你确保只有 ArrayList 类型被添加到你的数组中。

@SuppressWarnings("unchecked") 在 java 中出现是有原因的,你可以抑制警告并让你的编译器知道你不需要它的类型检查。

【讨论】:

    【解决方案2】:

    您不能创建通用数组;见official Java documentation on the subject

    你仍然可以摆脱编译时警告,就像这样......

    List[] data = new List[2];
    

    当然,这意味着当您开始引用它们的数据并适当地转换它时,您需要检查进入/退出列表的所有内容的类型。所以要小心。

    【讨论】:

      【解决方案3】:

      鉴于 Java 不允许创建泛型数组,因此可以取消显示警告。 尽管它不安全,但没有其他方法可以使用泛型创建数组,除非您忽略或禁止该警告。

      【讨论】:

      • Java 不允许这样做是有原因的。为什么你认为忽略它是安全的?
      • 我明确地将元素 0 和 1 设置为 ArrayList&lt;MyClass&gt; 类型的对象。 Java 允许它编译也是有原因的。
      • @thedarklord47 主要是因为与前通用数组的向后兼容性。无论哪种方式,我都没有说它永远不能接受,只是它不一定安全。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多