我试着用这个例子来理解这个区别:
import java.lang.reflect.*;
public class ClassDemo {
public static void main(String[] args) {
try {
// returns the Constructor object of the public constructor
//Class cls[] = new Class[] { String.class };
Constructor c = String.class.getConstructor();
System.out.println(c);
}
catch(Exception e) {
System.out.println(e);
}
}
} 我得到了这个结果:
公共java.lang.String()
在本例中,如果我替换:
Constructor c = String.class.getConstructor();出自:
Constructor c = String.class.getConstructor((Class<?>[]) null);我得到了同样的结果..。
为什么和什么是微妙的?
提前谢谢。
发布于 2015-07-14 10:36:26
他们做的事情完全一样。
当您调用String.class.getConstructor()时,实际上有一个空的Class<?>数组作为参数。这等于使用(Class<?>[]) null调用它,可以通过检查它将类型参数与构造函数中的参数进行比较的方式来查看:
private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
if (a1 == null) {
return a2 == null || a2.length == 0;
}
if (a2 == null) {
return a1.length == 0;
}
if (a1.length != a2.length) {
return false;
}
for (int i = 0; i < a1.length; i++) {
if (a1[i] != a2[i]) {
return false;
}
}
return true;
}如您所见,空数组和空值被视为相等。您也可以使用new Class<?>[0]作为参数来调用它。
发布于 2015-07-14 10:33:23
没有区别,因为它是相同的方法,Class.getConstructor(班级.parameterTypes)。允许在没有参数的情况下调用此方法。这些被称为瓦拉格。
发布于 2015-07-14 10:33:34
看看手册就行了。
public java.lang.reflect.Constructor getConstructor(java.lang.Class[] parameterTypes)
它采用构造函数参数的类型。在构造函数重载的情况下,需要它。
https://stackoverflow.com/questions/31404035
复制相似问题