Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何知道我正在使用哪个构造函数_Java_Constructor_Invoke - Fatal编程技术网

Java 如何知道我正在使用哪个构造函数

Java 如何知道我正在使用哪个构造函数,java,constructor,invoke,Java,Constructor,Invoke,我有一个包含两个构造函数和一个方法的类。方法的返回值取决于我调用的构造函数。我在这里做了一个简单的程序(它不工作) 封装测试; 导入java.lang.reflect.Constructor; 使用构造函数的公共类测试{ 公共测试使用构造函数(字符串){ System.out.println(“字符串作为参数!”); } 公共测试使用构造函数(int i){ System.out.println(“Int as param!”); } 调用的公共无效方法(){ if(this.usingCons

我有一个包含两个构造函数和一个方法的类。方法的返回值取决于我调用的构造函数。我在这里做了一个简单的程序(它不工作)

封装测试;
导入java.lang.reflect.Constructor;
使用构造函数的公共类测试{
公共测试使用构造函数(字符串){
System.out.println(“字符串作为参数!”);
}
公共测试使用构造函数(int i){
System.out.println(“Int as param!”);
}
调用的公共无效方法(){
if(this.usingConstructor()==1){
System.out.println(“Get'int'构造函数”);
}else if(this.usingConstructor()==2){
System.out.println(“Get'String'构造函数”);
}
}
使用构造函数()的公共int{
构造函数[]所有构造函数=this.getClass().getConstructors();
for(构造函数:所有构造函数){
类[]pType=constructor.getParameterTypes();
对于(int i=0;i
我想要得到的结果是:

Int作为参数! “获取'int'构造函数”

但这个例子的结果是:

Int作为参数! 获取“字符串”构造函数


谢谢你的帮助

我觉得你把它弄得太复杂了,以至于弄不清你在用哪个构造函数

正如您的消息所说,您正在使用
int
构造函数

您的
使用构造函数()
对我来说太复杂了,无法破译,显然无法正常工作

为每个构造函数编写代码时,您知道参数类型:

public TestUsingConstructor(int i) {
    // inside here you KNOW that your parameter is int. Isn't that enough?
}

我的另一个解决方案(如果我想检查覆盖的方法等)是调试程序并查看调用哪个方法。

为什么不在构造函数中设置一个标志,并在
CalledMethod()中检查它呢?
?而不知道您将如何处理它,我不得不说整个设计听起来有点不确定。你是说我在每个构造函数中声明了一个标志?这听起来是解决这个问题的好办法。顺便问一下,如果我能用“java反射”的方式来处理这个问题?谢谢,NPE你为什么要这样做?我有一个类,它有一个“size()方法”,例如,每个构造函数都有它不同的参数,比如“Person(String[])”,“Person(int[])”。。。当我新建这个类的对象并调用“size()”时,我想我应该知道我在使用哪个构造函数。(不仅仅是getSize())谢谢,我只是在每个构造函数中使用了一个“标志”。实际上,当我将一个“TestUsingConstructor()”新建为“tus”时,例如,“tus”调用“calledMethod()”。然后,在“calledMathed()”的内部,我将根据其构造函数的参数执行一些操作。但是,我想你是对的,我只是把事情弄得更复杂了。
public TestUsingConstructor(int i) {
    // inside here you KNOW that your parameter is int. Isn't that enough?
}