Java-数组可以是泛型参数吗?

Java-数组可以是泛型参数吗?,java,arrays,generics,casting,Java,Arrays,Generics,Casting,我想用Java生成一个参数化类,比如 class MyClass<T> class-MyClass 第一个问题:不能是Byte[]类型 第二个问题:如果是,我怎么知道它是字节类型的数组?通常我会先得到类,然后检查类类型 Class typeT = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]; anInstance.ge

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

class MyClass<T>
class-MyClass
第一个问题:不能是Byte[]类型

第二个问题:如果是,我怎么知道它是字节类型的数组?通常我会先得到类,然后检查类类型

Class typeT = (Class<T>)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
anInstance.getClass().equals(typeT)
Class typeT=(Class)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
anInstance.getClass()等于(typeT)
但是如果它是一个数组,它是如何工作的呢

先谢谢你


Altober

请记住,
java.util.ArrayList
Byte[]
相比,存储开销非常小,所有数组操作都可用,甚至更多,更不用说动态调整大小了


但是,如果必须使用
字节[]

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

list.get(0).getClass().getCanonicalName();
返回
java.lang.Byte[]

另外,
Class
对数组进行了积极测试(从
Class.isArray()
返回
true
)将返回数组的组件类型。换言之,以下代码:

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

返回
java.lang.Byte

它应该可以正常工作,因为数组在java(afaik)中只是具有语法糖的对象。好的,非常感谢,第二个问题是什么?您可以自己尝试第一件事。对于第二种情况,这应该由通用的getter和setter方法来处理。如果您需要检查数组的类型,例如,因为您正在将它们存储到对象列表中,那么您就存在设计缺陷。您应该能够使用关键字来确定它是否是
字节[]
或否。@AndyDavies请注意
instanceof
的限制是它只能对代码库中静态定义的类列表起作用。