如果要创建一个泛型数组,该怎么做比较好?

2020-12-11 21:18:48 +08:00
 zhao1014

直接强转成泛型数组吗?类似于这样的:

private final T[] array;
public ClassName(int length){
	//这里编译器会有警告
	array = (T[])new Object[length];
}
2320 次点击
所在节点    Java
7 条回复
chocovon
2020-12-11 22:06:02 +08:00
Effective Java 里讲过应避免使用泛型数组,用 List 代替
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);
```
OldCarMan
2020-12-11 22:55:07 +08:00
(⊙﹏⊙) sorry,回复不支持 md 吗?好像也删不了,你讲究看吧。
hdfg159
2020-12-12 00:09:21 +08:00
直接 object 大法
janus77
2020-12-12 01:32:30 +08:00
自己写一个数据结构
SoloCompany
2020-12-12 15:32:59 +08:00
我忘记在哪里的讨论 java 的 Type[] 就是一个 design flaw, 直接导致了和后来的泛型系统不兼容

要同时使用泛型和数组那就只能使用 Object[], 对于泛型 T, T[] 实际类型就是 Object[]
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);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734639

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX