【发布时间】:2013-12-13 01:52:01
【问题描述】:
我有一个通用的 K 并希望创建一个空数组,所以我键入
private K[] keys = new K[0];
但是 eclipse 说“无法创建 K 的通用数组”
我错过了什么吗?你可以创建一个空的int数组,这是泛型做不到的吗?
【问题讨论】:
标签: java
我有一个通用的 K 并希望创建一个空数组,所以我键入
private K[] keys = new K[0];
但是 eclipse 说“无法创建 K 的通用数组”
我错过了什么吗?你可以创建一个空的int数组,这是泛型做不到的吗?
【问题讨论】:
标签: java
【讨论】:
【讨论】:
K 不是问题,就像创建List[] 是问题一样。您可以创建一个抽象类(或接口)的数组,因为该数组不需要知道其元素的实现是什么。
K 可能是抽象的无关。这就是我要说的。
你可以使用Array.newInstance() 方法来实现这样的事情;考虑
public class Question<K> {
private K[] keys;
@SuppressWarnings("unchecked")
public Question(Class<? extends K> cls, int size) {
this.keys = (K[]) Array.newInstance(cls, size);
}
public K[] getKeys() {
return keys;
}
public static void main(String[] args) {
Question<String> question = new Question<String>(
String.class, 10);
String[] keys = question.getKeys();
keys[0] = "Hello";
keys[1] = "World";
keys[2] = "Goodbye";
keys[3] = "I must";
keys[4] = "be Going";
keys[5] = "Now";
keys[6] = "Parting";
keys[7] = "is";
keys[8] = "such";
keys[9] = "sweet sorrow";
System.out.println(Arrays.toString(question
.getKeys()));
}
}
这是打印出来的
[Hello, World, Goodbye, I must, be Going, Now, Parting, is, such, sweet sorrow]
【讨论】:
java.lang.reflect.Array 也可以。在我的回答中,我只是认为 new K[size] 不能在 java 中说,并且想到的直接解决方法:) 这绝对更安全。