
直接强转成泛型数组吗?类似于这样的:
private final T[] array; public ClassName(int length){ //这里编译器会有警告 array = (T[])new Object[length]; } 1 chocovon 2020-12-11 22:06:02 +08:00 Effective Java 里讲过应避免使用泛型数组,用 List 代替 |
2 OldCarMan 2020-12-11 22:52:50 +08:00 - 参照,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 rb6221 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 另外一个可以参考的例子 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); |