【发布时间】:2011-06-13 11:33:21
【问题描述】:
将 Array.newInstance 静态方法视为在 Java 中创建泛型类型数组的一种方式。 我没有看到如何从一个空泛型类型参数创建一个泛型数组:
/**
* Creates and fills a generic array with the given item
*/
public static <T> T[] create(T item, int length)
{
T[] result = (T[]) Array.newInstance(item.getClass(), length);
for(int i = 0; i < length; i++)
result[i] = item;
return result;
}
当我打电话时,上述方法有效。创建(“ABC”,10);我得到一个长度为 10 的 String[],在数组的所有位置都带有“abc”。 但是我怎样才能让一个空字符串参数返回一个长度为 10 且所有位置都为空的字符串数组呢?
例如
String nullStr = null;
String[] array = create(nullStr, 10); // boom! NullPointerException
有没有办法在不使用其成员之一的情况下获取“项目”类(因为它是空的)?
我知道我可以新建一个数组String[] array = new String[10],但这不是重点。
谢谢
【问题讨论】:
-
在这种情况下是不可能的——只有剩下的类型信息将与
item一起使用(但如果它为空,则此信息自然不会:-)。这可以通过使用Class 来完成,或者,也许只是create(SomeDefault, 10),例如create("", 10)。仅供参考:C#(不是 Java)有 reified types 并支持typeof(T)等等。哦,查看具体类型的链接,其中还谈到了类型擦除:-)