直接强转成泛型数组吗?类似于这样的:
private final T[] array;
public ClassName(int length){
//这里编译器会有警告
array = (T[])new Object[length];
}
1
chocovon 2020 年 12 月 11 日 Effective Java 里讲过应避免使用泛型数组,用 List 代替
|
2
OldCarMan 2020 年 12 月 11 日 - 参照,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); ``` |
3
OldCarMan 2020 年 12 月 11 日
(⊙﹏⊙) sorry,回复不支持 md 吗?好像也删不了,你讲究看吧。
|
4
hdfg159 2020 年 12 月 12 日 via Android
直接 object 大法
|
5
rb6221 2020 年 12 月 12 日
自己写一个数据结构
|
6
SoloCompany 2020 年 12 月 12 日
我忘记在哪里的讨论 java 的 Type[] 就是一个 design flaw, 直接导致了和后来的泛型系统不兼容
要同时使用泛型和数组那就只能使用 Object[], 对于泛型 T, T[] 实际类型就是 Object[] |
7
SoloCompany 2020 年 12 月 12 日 另外一个可以参考的例子
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); |