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

时间:2014-06-05 11:25:30

标签: java constructor invoke

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

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'构造函数

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我认为你只是为了找出你正在使用的构造函数而使它变得太复杂。

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

您的usingConstructor()对我来说太复杂了,无法解读它,显然无法正常工作。

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

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

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