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