【问题标题】:Array type in generics泛型中的数组类型
【发布时间】:2011-04-20 16:26:44
【问题描述】:

我正在尝试创建一个泛型类型的数组。我收到错误:

 Pair<String, String>[] pairs;   // no error here

 pairs = new Pair<String, String>[10];   // compile error here

 void method (Pair<String, String>[] pairs)  // no error here.

我很困惑。任何线索为什么会发生这种情况。

【问题讨论】:

  • 你错过了new我想
  • 抱歉,忘记了新的。问题仍然有效。
  • 能否提供错误信息?

标签: java arrays generics


【解决方案1】:

这背后的原因是您不能创建泛型或参数化类型的数组,只能创建 reifiable 类型(即可以在运行时推导出的类型)。

尽管声明这样的数组类型作为变量或方法参数是可能的。这有点不合逻辑,但Java现在就是这样。

Java Generics and Collections 在第 6 章中广泛讨论了这个问题和相关问题。

【讨论】:

  • 很好的答案,你能解释一下他们为什么这样做吗?
  • @javaguy,我只能根据 JGaC 中的猜测推测 :-)。可能的原因是设计者想让数组的使用更方便。避免这种情况可能会更好,并且更喜欢使泛型类型系统更清洁和更安全。这会使数组的使用在某些情况下更加尴尬,从而实际上加速了许多开发人员向真正集合的过渡——这并不是一件坏事。
【解决方案2】:

创建没有泛型类型的数组:

Pair<String, String>[] pairs = new Pair[10];

编译器不会抱怨,您也不必使用任何@SuppressWarnings 注释。

【讨论】:

  • 是的,不需要我的复杂。 +1
【解决方案3】:

您不能创建泛型类型的数组
Check generic Tutorial

【讨论】:

    【解决方案4】:

    这个构造编译

    import java.util.HashMap;
    
    
    public class Test {
        class Pair<K,V> extends HashMap<K,V> {
        }
    
        public static void main(String[] args) {
            Pair<String, String>[] pairs = new Pair[10];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2015-08-26
      • 2018-05-25
      • 1970-01-01
      相关资源
      最近更新 更多