Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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_Reflection - Fatal编程技术网

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

在java中,如何调用当前类的实例创建者的构造函数?,java,reflection,Java,Reflection,我有一个类叫做“a”,一个对象“a”创建了一个对象“b”类的对象“b”。现在“b”运行一个方法,该方法想要创建一个新的b父实例(请不要将其与继承混淆)——创建“b”的类,如这里所示的“a” 这在Java中有可能吗?或者一些设计建议可能有用 谢谢 编辑:根据建议,我也在添加我的设计要求。我有一个“ExitController”类,根据调用方函数的不同,它的工作方式也不同——比如如果它被UserX调用,它会终止程序,如果它被UserY调用,它会让他注销,等等。 通常我应该在我的用户界面中放置一个Ex

我有一个类叫做“a”,一个对象“a”创建了一个对象“b”类的对象“b”。现在“b”运行一个方法,该方法想要创建一个新的b父实例(请不要将其与继承混淆)——创建“b”的类,如这里所示的“a”

这在Java中有可能吗?或者一些设计建议可能有用

谢谢

编辑:根据建议,我也在添加我的设计要求。我有一个“ExitController”类,根据调用方函数的不同,它的工作方式也不同——比如如果它被UserX调用,它会终止程序,如果它被UserY调用,它会让他注销,等等。 通常我应该在我的用户界面中放置一个ExitController方法,但是由于一些限制,我不能这样做。此外,与父对象/类名提供的用途相比,传递父对象/类名似乎非常昂贵。

基本上,您必须将父对象本身或父类型传递到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();
    }
}
然而,这显然是丑陋的。您真的不允许向
用户界面添加其他方法吗?否则,以下将是更好的设计(称为:


根据你上次的陈述:

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

这毫无意义。你量过了吗?向我们显示结果。

基本上,您必须将父类本身或父类类型传递到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();
    }
}
然而,这显然是丑陋的。您真的不允许向
用户界面添加其他方法吗?否则,以下将是更好的设计(称为:


根据你上次的陈述:

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


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

如果我正确理解了您的问题,我认为类
B
必须存储对对象
a
a.class
的引用。这将允许
b
构造
a
的新实例。最简单的方法是
B
的构造函数采用类参数。

如果我正确理解了你的问题,我认为类
B
必须存储对对象
a
a.class
的引用。这将允许
b
构造
a
的新实例。最简单的方法是让
B
的构造函数接受一个类参数。

这听起来很奇怪,也许你应该重新考虑你的设计。也许你需要一个工厂课程。如果我们真的知道问题是什么,设计建议可能是一个非常好的主意。这听起来像是解决某些问题的部分办法,但不清楚你想解决什么问题。@dobroby是对的。在将来,试着详细阐述功能需求本身,而不是问如何实现一个解决方案,这个解决方案本身可能不是正确的解决方案。这听起来很奇怪,也许你应该重新考虑你的设计。也许你需要一个工厂课程。如果我们真的知道问题是什么,设计建议可能是一个非常好的主意。这听起来像是解决某些问题的部分办法,但不清楚你想解决什么问题。@dobroby是对的。在将来,试着详细阐述功能需求本身,而不是问如何实现一个解决方案,而这个解决方案本身可能不是正确的解决方案。
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.
    }
}