如何存储实现某些接口类型的通用对象数组?

How to store a generic array of objects the type of which implements some inteface?

我已 运行 进入以下问题。我有一些通用类型的对象数组,我知道由于类型擦除你必须这样做:

X[] a = (X[])new Object[size];

但不幸的是,当 X 实现某些接口时它不起作用。以下是描述我的意思的两个例子:

1(有效):

import java.util.*;
import java.lang.*;
import java.io.*;

class Foo<X>{
    private X[] a = (X[])new Object[2]; 
}

class Main {
    public static void main (String[] args) throws java.lang.Exception {
        Foo<Integer> foo = new Foo<Integer>();
    }
}

2(无效):

import java.util.*;
import java.lang.*;
import java.io.*;

class Foo<X extends Comparable<X>>{
    private X[] a = (X[])new Object[2]; //doesn't work
}

class Main {
    public static void main (String[] args) throws java.lang.Exception {
        Foo<Integer> foo = new Foo<Integer>();
    }
}

在这种情况下,我是否必须求助于将所有内容存储为 Object 并强制转换所有类型?为什么会这样?

我收到的第二个示例的错误消息是:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object;    cannot be cast to [Ljava.lang.Comparable;
at Foo.<init>(Main.java:10)
at Ideone.main(Main.java:17)

感谢immibis,改

(X[])new Object[size];

(X[])new Comparable[size];

成功了。