我有一个通用的K并希望创建一个空数组,所以我输入
private K[] keys = new K[0];
然而eclipse说“无法创建K的通用数组”
我错过了什么吗?你可以创建一个int的空数组,这是泛型不能做的吗?
答案 0 :(得分:2)
您无法在Java中创建泛型数组。解决方法是:
keys = (K[])new Object[size];
虽然这会产生编译器警告。
一般来说,这不是一个好习惯,做起来并不安全。有关更多信息,请参阅this主题。
但是,如果你无法避免它,它应该只与new
一起使用,因为Object
数组到K[]
的这种转换可能会用来插入你赢得的东西不喜欢。
更新:
但实际上,正如您在this中看到的那样,回答java.lang.reflect.Array.newInstance()
可能是使用反射库的更安全方式。
答案 1 :(得分:1)
答案 2 :(得分:1)
你可以使用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]