在Java

时间:2015-08-03 23:47:09

标签: java arrays generics

如果我用这个构造函数定义了我自己的泛型数组:

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);

第一个参数标记为“???”

2 个答案:

答案 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);