元组通用数组创建错误列表 - Java

时间:2017-12-15 22:46:21

标签: java generics compiler-errors hashmap nested-generics

这有效:

static class HashMap {

        private final int initialCapacity;
        private final double loadFactor;
        private List<Data<Character, Integer>> [] table;

        public HashMap() {
          this.initialCapacity = 16;
          this.loadFactor = 0.75;
          table = (List<Data<Character, Integer>> [])new Object[initialCapacity];
        }
    }

这不起作用(给出通用数组创建错误):

static class HashMap<K, V> {

    private final int initialCapacity;
    private final double loadFactor;
    private List<Data<K, V>> [] table;

    public HashMap() {
      this.initialCapacity = 16;
      this.loadFactor = 0.75;
      table = (List<Data<K, V>> [])new Object[initialCapacity];
    }
}

如何让第二个版本正常工作?

你可能会说,我正在尝试实现一个通用的HashMap以获得乐趣。 Data类只是我编写的一个简单的自定义元组类,我希望我的HashMap能够使用用户可能提供的任何键/值类型。表数组是一个包含元组的链表的数组(基本上是一个哈希表)。注意:这里的List类不是内置的Java List类,它也是我WROTE MYSELF的类!

关于通用数组创建错误,有一些关于SO的问题,但它们都没有解决这种情况。任何想法都表示赞赏!

P.S这是Data类,以防有人想要测试代码:

  static class Data<K, V> {
    private final K key;
    private final V value;
    public Data(K key, V value) {
      this.key = key;
      this.value = value;
    }
    public K getKey() {
      return key;
    }
    public V getValue() {
      return value;
    }
    @Override
    public boolean equals(Object obj) {
      if (obj == null)
        return false;
      if (!Data.class.isAssignableFrom(obj.getClass()))
        return false;

      final Data<K, V> b = (Data<K, V>) obj;
      return this.key.equals(b.getKey());
    }
  }

0 个答案:

没有答案