在java中,如何调用当前类的实例创建者的构造函数?

Jag*_*uar 1 java reflection

我有一个班级说'A',一个对象'a'创建一个'B'类对象'b'.现在'b'运行一个想要创建b的父实例的方法(请不要将它与继承混淆) - 创建'b'的类,这里是'A'.

这在Java中是否可行?或者也许一些设计建议可能有用.

谢谢 !

编辑:根据建议,我也在添加我的设计要求.我有一个"ExitController"类,根据调用函数的不同,它的工作方式不同 - 如果它是由UserX调用的,它会终止程序,如果它由UserY调用它会将其记录下来,等等.通常我应该放置一个我的用户界面中的ExitController方法,但由于我不能使用一些约束.此外,与它提供的使用相比,传递父对象/类名看起来非常昂贵.

Bal*_*usC 5

基本上,您必须将父本身或父类型传递给B的构造函数.以下示例说明了最后一种情况.

class A {
    B b;

    A() { 
        b = new B(getClass());
    }
}

class B {
    Class<?> parentClass;

    B(Class<?> parentClass) {
        this.parentClass = parentClass;
    }

    void createParent() throws Exception {
        Object o = parentClass.newInstance();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用泛型,您可以使其更安全.但由于功能要求并不完全清楚,我已经离开了.


更新按照您的更新,创建实例是毫无意义的.您可以检查类类型并相应地处理.而不是createParent()在上面的例子中,做:

void exit() {
    if (parentClass == UserX.class) {
        // Terminate program.
    } else if (parentClass == UserY.class) {
        // Logoff user.
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这很简单.你真的不被允许在User界面上添加另一种方法吗?否则以下将是更好的设计(称为战略模式):

interface User {
    void exit();
}

class ExitController {
    void exit(User user) {
        user.exit();
    }
}

class UserX implements User {
    public void exit() {
        // Terminate program.
    }
}

class UserY implements User {
    public void exit() {
        // Logoff user.
    }
}
Run Code Online (Sandbox Code Playgroud)

根据你上次的陈述:

此外,与它提供的使用相比,传递父对象/类名看起来非常昂贵

这毫无意义.你测量过吗?向我们展示结果.