【发布时间】:2013-06-21 01:29:16
【问题描述】:
这是来自Two methods for creating generic arrays的以下问题。
给定两种方法,
@SuppressWarnings("unchecked")
static <T> T[] array1(final Class<T> elementType, final int size) {
return (T[]) Array.newInstance(elementType, size);
}
static <T> T[] array2(final Class<T[]> arrayType, final int size) {
return arrayType.cast(Array.newInstance(arrayType.getComponentType(), size));
}
这两种方法都适用于 Object 类型。
final Integer[] objectArray1 = array1(Integer.class, 0);
final Integer[] objectArray2 = array2(Integer[].class, 0);
当涉及到原语时,两个调用都不能编译。
// array1
final int[] primitiveArray1 = array1(int.class, 0);
GenericArray.java:12: error: incompatible types
final int[] primitiveArray1 = array1(int.class, 0);
^
required: int[]
found: Integer[]
1 error
// array2
final int[] primitiveArray2 = array2(int[].class, 0);
GenericArray.java:13: error: method array2 in class GenericArray cannot be applied to given types;
final int[] primitiveArray2 = array2(int[].class, 0);
^
required: Class<T[]>,int
found: Class<int[]>,int
reason: inferred type does not conform to declared bound(s)
inferred: int
bound(s): Object
where T is a type-variable:
T extends Object declared in method <T>array2(Class<T[]>,int)
1 error
如何处理原始类型?
【问题讨论】:
-
您使用的是哪个版本的 Java?
-
@Code-Guru:我没看到。他们似乎在问非常不同的事情。
-
@ruakh 我应该仔细看看 ;-(
标签: java arrays generics primitive