泛型中的数组类型

3

我正在尝试创建一个通用类型的数组。但是我遇到了错误:

 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.

我有些困惑,请问发生这种情况的原因是什么?


1
我觉得你漏掉了new关键字。 - jmj
抱歉,忘记了“new”。问题仍然有效。 - fastcodejava
1
你能提供一个错误信息吗? - user132371
4个回答

9
这是因为你不能创建泛型或参数化类型的数组,只能创建可推导出运行时类型的可重用类型。

但是,可以将这样的数组类型声明为变量或方法参数。这有点不合逻辑,但这就是Java现在的情况。

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


好的回答,你能解释一下他们为什么这样做吗? - javaguy
1
@javaguy,我只能猜测 :-) 根据JGaC中的猜测。可能的原因是设计师想要使数组的使用更加方便。避免这种情况可能会更好,并且更喜欢使通用类型系统更加清洁和安全。这将使在某些情况下使用数组更加麻烦,从而实际上加速了许多开发人员向真正的集合的过渡 - 这并不是一件坏事。 - Péter Török

6
创建不带泛型类型的数组:
Pair<String, String>[] pairs = new Pair[10];

编译器不会报错,您也不需要使用任何@SuppressWarnings注解。

没错,不需要我的麻烦。+1 - Bozho

1

这个结构编译通过

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];
    }
}

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接