直接强转成泛型数组吗?类似于这样的:
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];
}
|
1
Effective Java 里讲过应避免使用泛型数组,用 List 代替
|
|
2
- 参照,Arrays 的 copyOf 方法:
```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); ``` |
|
OldCarManDec 11, 2020
3
(⊙﹏⊙) sorry,回复不支持 md 吗?好像也删不了,你讲究看吧。
|
|
hdfg159Dec 12, 2020 via Android
4
直接 object 大法
|
|
rb6221Dec 12, 2020
5
自己写一个数据结构
|
|
SoloCompanyDec 12, 2020
6
我忘记在哪里的讨论 java 的 Type[] 就是一个 design flaw, 直接导致了和后来的泛型系统不兼容
要同时使用泛型和数组那就只能使用 Object[], 对于泛型 T, T[] 实际类型就是 Object[] |
|
7
另外一个可以参考的例子
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); |