如何存储实现某些接口类型的通用对象数组?
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];
成功了。
我已 运行 进入以下问题。我有一些通用类型的对象数组,我知道由于类型擦除你必须这样做:
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];
成功了。