【问题标题】:I know that generic arrays are not supported by Java, but I don't know how to fix this so it will work我知道Java不支持泛型数组,但我不知道如何解决这个问题,所以它会起作用
【发布时间】:2014-12-01 22:02:01
【问题描述】:

我正在尝试创建一个 HashTable 并且这部分代码需要一个数组,但是当它没有被定义为泛型时,我会收到未经检查的警告,但我知道不支持泛型数组,但我不确定如何解决这个问题。

array = new HashEntry<AnyType>[ nextPrime( arraySize ) ];

【问题讨论】:

  • @SuppressWarnings("unchecked") 是这里的规范方法。
  • @MarkoTopolnik 非常小心。
  • @chrylis 或者,最好为它编写好的测试:)
  • 您可能会发现stackoverflow.com/questions/12366035/… 很有帮助
  • @MarkoTopolnik 彻底的测试总是好的,但它们不会被证明是负面的(没有堆污染)。

标签: java arrays generics


【解决方案1】:

我建议查看 JDK 自己的 HashMap 代码,特别是 resize 方法和这些行:

    @SuppressWarnings({"rawtypes","unchecked"})
        Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];

然后将newTab 分配给主实例变量table。所以,如果 JDK 无法避免@SuppressWarnings,你也不会。

【讨论】:

    【解决方案2】:

    不要使用数组。使用集合。

    使用数组需要更多的代码、更多的关注并且没有明显的好处。

    使用集合可以利用 JDK 中内置的代码和注意事项。
    如果您有一个 HashEntry 数组,那么您就可以使用 Map - 只需使用常量顺序映射:

    Map<SomeKey, SomeValue> map = new LinkedHashMap<SomeKey, SomeValue>();
    

    【讨论】:

      【解决方案3】:

      这样写

      @SuppressWarnings("unchecked")
      HashEntry<K, V>[] array = new HashEntry[nextPrime()];
      

      然后将@SuppressWarnings("unchecked") 添加到它。

      【讨论】:

      • 当我这样做时,我得到一个标识符预期错误@MJSG
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-03
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      相关资源
      最近更新 更多