我想为我的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);