Java - 数组可以是通用参数吗?

时间:2015-10-21 08:37:21

标签: java arrays generics casting

我想用Java生成一个参数化类,如

class MyClass<T>

第一个问题:T可以是Byte []类型吗?

第二个问题:如果是这样,怎么知道我知道它是一个Byte类型的数组?通常我会上课,然后检查班级类型。

Class typeT = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
anInstance.getClass().equals(typeT)

但是,如果它是一个数组,它是如何工作的?

提前谢谢

Altober

1 个答案:

答案 0 :(得分:0)

请注意,与java.util.ArrayList<Byte>相比,Byte[]可以实现相同的目的,只需很少的存储开销,数组的所有操作都可用,还有更多,更不用说动态调整大小了。

但是,如果您必须使用Byte[]

如果MyClass<T>本身就是一个集合,或者您可以返回T的单个实例,那么最快的方法是检查该实例的类型:

list.get(0).getClass().getCanonicalName();

返回java.lang.Byte[]

同样Class<T>对数组主义进行正面测试(从true返回Class.isArray())将返回数组的组件类型。换句话说,代码如下:

list.get(0).getClass().getComponentType();

返回java.lang.Byte