Java getConstructor()返回未实现的构造函数
我正在学习Java中的一些反射特性,在使用此类测试Java getConstructor()返回未实现的构造函数,java,reflection,constructor,Java,Reflection,Constructor,我正在学习Java中的一些反射特性,在使用此类测试getConstructor()函数时遇到了一个奇怪的问题 公共类整数序列{ 私有整数[]元素; 私有整数大小; 私有整数最大值=100; 公共整数序列(){ 元素=新整数[最大大小]; 尺寸=0; System.out.println(“大家好”); } } 函数返回一个有效的构造函数,但是“Hello Guys”消息永远不会打印出来 此外,如果我删除IntegerSequence的构造函数,它也会返回一个有效的构造函数,并且不会抛出任何异常
getConstructor()
函数时遇到了一个奇怪的问题
公共类整数序列{
私有整数[]元素;
私有整数大小;
私有整数最大值=100;
公共整数序列(){
元素=新整数[最大大小];
尺寸=0;
System.out.println(“大家好”);
}
}
函数返回一个有效的构造函数,但是“Hello Guys”消息永远不会打印出来
此外,如果我删除IntegerSequence
的构造函数,它也会返回一个有效的构造函数,并且不会抛出任何异常,即使IntegerSequence
类中不再有任何异常
我读到getConstructor()
只返回类中编码的构造函数,而不是Java自动生成的构造函数,所以我有点不知所措
以下是使用函数及其输出的代码:
public void invokeDefaultConstructor(Class c){
Constructor build = null;
try {
build = c.getConstructor();
} catch (NoSuchMethodException e) {
System.out.println(e);
e.printStackTrace();
}
System.out.println(build.toString());
System.out.println(build.getName());
}
控制台输出:
public generics.IntegerSequence()
generics.IntegerSequence
你知道什么会导致这种行为吗?
函数返回一个有效的构造函数,但是“Hello Guys”消息从未打印出来
这是意料之中的,因为你从未去过任何地方。您只能从类中获取构造函数
我读到getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数
我不知道你在哪里读到的。当然不是这样说的
函数返回一个有效的构造函数,但是“Hello Guys”消息从未打印出来
这是意料之中的,因为你从未去过任何地方。您只能从类中获取构造函数
我读到getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数
我不知道你在哪里读到的。当然没有这么说。除了已经指出的,可能值得补充的是,
getConstructor()
可能确实无法返回默认构造函数。例如,默认构造函数的可见性和它们所在的类的可见性相同。所以,如果类不是public
默认构造函数也不是public,这意味着getConstructor()
将无法返回它。或者当默认构造函数在内部类中时,因为这将要求它接受外部类的参数,但getConstructor()
指定缺少任何参数。好的,谢谢@jb nizet。所以我想当你试图获取一个不存在的公共构造函数时,我并没有真正理解什么时候会抛出一个NoSuchMethodException
。javadoc再次明确指出:如果找不到匹配的方法,那么除了已经指出的以外,getConstructor()
可能确实无法返回默认构造函数。例如,默认构造函数的可见性和它们所在的类的可见性相同。所以,如果类不是public
默认构造函数也不是public,这意味着getConstructor()
将无法返回它。或者当默认构造函数在内部类中时,因为这将要求它接受外部类的参数,但getConstructor()
指定缺少任何参数。好的,谢谢@jb nizet。所以我想当你试图获取一个不存在的公共构造函数时,我并没有真正理解什么时候会抛出一个NoSuchMethodException
。javadoc再次明确指出:如果找不到匹配的方法。“我读到getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数”您能指出其来源吗,因为它可能需要更正/澄清。我可能误解了所说的内容,对不起…”我读到了getConstructor()只返回类中编码的构造函数,而不是Java自动生成的构造函数“你能指出源代码吗,因为它可能需要更正/澄清。我可能误解了所说的内容,对不起。。。