如果我用这个构造函数定义了我自己的泛型数组:
public PublisherGenericArray(Class<E> c, int s)
{
// Use Array native method to create array
// of a type only known at run time
@SuppressWarnings("unchecked")
final E[] a = (E[]) Array.newInstance(c, s);
this.a = a;
}
如何创建满足第一个参数(c类)的对象?
基本上:
PublisherGenericArray <String> newArray = new <String> PublisherGenericArray(???,newSize);
第一个参数标记为“???”
答案 0 :(得分:2)
PublisherGenericArray<String> newArray = new PublisherGenericArray<String>(String.class, newSize);
答案 1 :(得分:1)
构造的第一个参数是参数化类型的类。
参数化类型是泛型类型的调用。例如
Foo<T>
是一种通用类型,而在
Foo<Integer> t;
Foo<Integer>
是参数化类型。
在您的代码中,E
是参数类型(变量类型)
无穷大可能的结构数量。列出一些:
PublisherGenericArray<Integer> t = new PublisherGenericArray<Integer>(Integer.class, 3);
PublisherGenericArray<String> tt = new PublisherGenericArray<String>(String.class, 3);
PublisherGenericArray<NullPointerException> ttt = new PublisherGenericArray<>(NullPointerException.class, 3);
注意ttt
,我使用了 The Diamond ,它只适用于java SE 7及更高版本
您也可以通过在原始类型上进行调用来创建参数化类型
class A<T> {
}
PublisherGenericArray<A> tttt = new PublisherGenericArray<A>(
A.class, 4);