我想为我的Java项目创建一个自定义的泛型类,这就是我得到的成果-我找到了作为创建泛型数组的示例的代码。

public class RegisterSet<T> {
   private T[] register;
   public <T> RegisterSet(int size) {
      register = (T[])Array.newInstance(T, size);
   }
}


现在,我收到错误Incompatible types - found: T[], required: T[],它对我完全没有意义-我该如何解决?

最佳答案

您需要一个包含T的Class对象的变量。最简单的填充方法可能是静态工厂方法:

public class RegisterSet<T> {
   public static <T>RegisterSet<T> create(Class<T> clazz, int size) {
       return new RegisterSet<T>(clazz, size);
   }

   private T[] register;

   @SuppressWarnings("unchecked")
   private RegisterSet(Class<T> clazz, int size) {
      if (clazz.isPrimitive()) throw new IllegalArgumentException("Cannot create a RegisterSet of primitives");
      register = (T[])Array.newInstance(clazz, size);
   }
}


静态方法可以让您说

RegisterSet<String> x = RegisterSet.create(String.class, 42);


比它短一些,重复性比

RegisterSet<String> x = new RegisterSet<String>(String.class, 42);

10-07 13:57