[英]Class.getConstructor function parameters
我正在研究这段代码并被困在注释行中:
protected <T> T creaOggetto(Class<T> classe, int id) {
try {
Package pacchetto = classe.getPackage();
String nomePacchetto = pacchetto.getName();
String nomeClasse = classe.getSimpleName();
String nomeClasseRisultato = nomePacchetto + ".impl." + nomeClasse + "Impl";
Class<?> classeRisultato = Class.forName(nomeClasseRisultato);
Constructor<?> costruttore = classeRisultato.getConstructor(new Class[] {int.class});
@SuppressWarnings("unchecked")
T risultato = (T)costruttore.newInstance(new Object[] {id});
return risultato;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return null;
}
我知道getConstructor()
返回该类的构造函数对象,但是(new Class[] {int.class})
让我感到困惑,他的目的是什么?
根据 Java 文档:
public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException, SecurityException
返回一个 Constructor 对象,该对象反映了此 Class 对象表示的类的指定公共构造函数。 parameterTypes 参数是一个 Class 对象数组,这些对象按照声明的顺序标识构造函数的形参类型。 如果此 Class 对象表示在非静态上下文中声明的内部类,则形参类型包括显式封闭实例作为第一个参数。
所以, classeRisultato.getConstructor(new Class[] {int.class});
返回接受一个且只接受一个int
参数的构造函数,如果不存在则返回NoSuchMethodException
。
在您发布的代码中,请注意,使用该构造函数,它会创建该类的一个新实例并传递id
,即实际的int
参数:
T risultato = (T)costruttore.newInstance(new Object[] {id});
getConstructor(new Class[]); 方法接受一个类数组,这些类表示您想要获取的构造函数的参数。 例如,如果您在类 X 中有一个构造函数,
public X(int a, int b)
您可以使用X.getClass().getConstructor(new Class[] {int.class, int.class});
获得所述构造函数X.getClass().getConstructor(new Class[] {int.class, int.class});
数组中的两个 int.class 参数表示构造函数接收的两个整数。
由于可能存在多个构造函数,因此您需要在调用 Class.getConstuctor 时指定构造函数的签名以获取您想要的构造函数。
签名包括构造函数的类型参数。 签名还包括方法名,但对于构造函数,方法名在源代码中始终是类名,在编译代码中始终是“<init>”,因此您无需指定。
所以如果你有 new Class[] {int.class} 那么你是说签名由一个“int”类型的参数组成。 这意味着您需要类名 X 的构造函数 X(int x) (请注意,重要的是参数的类型,而不是参数变量的名称)。
另请注意,int.class 解析为 java.lang.Integer.TYPE,用于表示原始类型“int”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.