如果要创建一个泛型数组,该怎么做比较好?
直接强转成泛型数组吗?类似于这样的:
private final T[] array; public ClassName(int length){ //这里编译器会有警告 array = (T[])new Object[length]; }
直接强转成泛型数组吗?类似于这样的:
private final T[] array; public ClassName(int length){ //这里编译器会有警告 array = (T[])new Object[length]; }
“`javascript
public static <T> T[] newArray(int length, Class<? extends T[]> type) {
return ((Object) type == (Object) Object[].class) ? (T[]) new Object[length] : (T[])Array.newInstance(type.getComponentType(), length);
}
“`
– 使用
“`javascript
Integer[] integers = newArray(10, Integer[].class);
“`
要同时使用泛型和数组那就只能使用 Object[], 对于泛型 T, T[] 实际类型就是 Object[]
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#toArray-java.util.function.IntFunction-
方法签名
<A> A[] toArray(IntFunction<A[]> generator)
使用
SomeType[] typedArray = someStreamtoArray(SomeType[]::new);