我想用Java生成一个参数化类,如
class MyClass<T>
第一个问题:T可以是Byte []类型吗?
第二个问题:如果是这样,怎么知道我知道它是一个Byte类型的数组?通常我会上课,然后检查班级类型。
Class typeT = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
anInstance.getClass().equals(typeT)
但是,如果它是一个数组,它是如何工作的?
提前谢谢
Altober
答案 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
。