我有一个班级说'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();
}
}
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)
根据你上次的陈述:
此外,与它提供的使用相比,传递父对象/类名看起来非常昂贵
这毫无意义.你测量过吗?向我们展示结果.