我有一个包含两个构造函数和方法的类。方法的返回值取决于我调用的构造函数。我在这里做了一个简单的程序(它不起作用)。
package test;
import java.lang.reflect.Constructor;
public class TestUsingConstructor {
public TestUsingConstructor(String string) {
System.out.println("String as param !");
}
public TestUsingConstructor(int i) {
System.out.println("Int as param !");
}
public void CalledMethod (){
if(this.usingConstructor() == 1){
System.out.println("Get 'int' Constructor");
}else if(this.usingConstructor() == 2){
System.out.println("Get 'String' Constructor");
}
}
public int usingConstructor() {
Constructor[] allConstructors = this.getClass().getConstructors();
for (Constructor constructor : allConstructors) {
Class<?>[] pType = constructor.getParameterTypes();
for (int i = 0; i < pType.length; i++) {
if (pType[i].equals(int.class)) {
return 1;
} else {
return 2;
}
}
}
return 1;
}
public static void main(String[] args) {
TestUsingConstructor t1 = new TestUsingConstructor(1);
t1.CalledMethod();
//TestUsingConstructor t2 = new TestUsingConstructor("test");
//t2.CalledMethod();
}
}
我想得到的结果如下:
Int as param! “获取'int'构造函数”
但是这个例子的结果是:
Int as param! 获取'String'构造函数
感谢您的帮助!
答案 0 :(得分:0)
我认为你只是为了找出你正在使用的构造函数而使它变得太复杂。
正如您的消息所说,您正在使用int
构造函数。
您的usingConstructor()
对我来说太复杂了,无法解读它,显然无法正常工作。
当您为每个构造函数编写代码时,您知道参数类型:
public TestUsingConstructor(int i) {
// inside here you KNOW that your parameter is int. Isn't that enough?
}
我的另一个解决方案(如果我想检查覆盖方法等)是调试程序并查看调用哪个方法。