gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:17:01 24 4
gpt4 key购买 nike

我有一个类“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();
}
}

generics你可以让它更安全。但由于功能要求并不完全清楚,所以我将其保留。


更新 根据您的更新,创建实例毫无意义。您可以只检查类类型并进行相应处理。代替上面例子中的 createParent(),做:

void exit() {
if (parentClass == UserX.class) {
// Terminate program.
} else if (parentClass == UserY.class) {
// Logoff user.
}
}

然而,这非常丑陋。您真的不允许向User 接口(interface)添加其他方法吗?否则以下将是更好的设计(称为 Strategy pattern ):

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.
}
}

根据你最后的陈述:

Also, passing the parent object/classname is seeming very expensive compared to the use it offers

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

关于java - java中如何调用当前类的实例创建者的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3909021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com