如何调用需要Class <t>对象作为参数的方法?</t>

时间:2011-12-11 00:20:18

标签: java generics casting

我有一个类,我需要构造函数来初始化变量数组。我在互联网上研究并堆栈溢出但现在我仍然坚持如何调用该方法。例如,我怎么能在我的例子中调用method1?

public class SomeClass<T>{

   public T[] array;

   //Constructor
   public SomeClass()
   {
        Method1(T, 5); //?  error
        Method1(5); //?   error
        Method1(new T().GetType(), 5); //? error
        // HOW CAN I CALL THAT METHOD?

        array = (T[])(new Object[5]); // this gives an error too
   }

   private void Method1(Class<T> type, int size)
   {
       array = (T[])Array.newInstance(type, size);
   }
}

2 个答案:

答案 0 :(得分:5)

试试这个:

class SomeClass<T> {

    private T[] array;

    @SuppressWarnings("unchecked")
    public SomeClass(Class<T> klass, int size) {
        array = (T[]) Array.newInstance(klass, size);
    }

}

并实例化它:

SomeClass<Integer> example = new SomeClass<Integer>(Integer.class, 10);

请注意,实例化的数组是一个对象数组,在您明确指定它们之前,它的所有元素都将是null

答案 1 :(得分:3)

您需要将代表Class的{​​{1}}对象传递到T构造函数中:

SomeClass

这是必要的,因为Type Erasure,这意味着public SomeClass(Class<T> clazz) { array = Method1(clazz, 5); } 在运行时没有任何意义(Array.newInstance采用表示数组元素类型的T对象,原因相同)。