我想创建一个方便的超类,它将创建任何subclass it is ran from的实例,而不必硬编码子类的名称。最快的方法是什么?
我们可以假设子类的构造函数具有相同的签名,例如没有参数。
class Main {
public static void main (String [] args) {
Main m = new NAME-OF-SUBCLASS();
}
}
class MainSub1 extends Main { /*...*/ }
class MainSub2 extends Main { /*...*/ }
因此,当从命令行调用MainSub1($ java MainSub1
)中的main时,会创建一个MainSub1对象,等等。
正如我写的那样,我找到了this线程,其中接受的答案说它无法完成,但当然它可以通过反思或某种方式,对吧?
答案 0 :(得分:1)
不是我真的推荐它,但它有一个肮脏的技巧:
class Main {
static Main m;
public static void main (String [] args) {
// use m
}
}
class MainSub1 extends Main { static { m = new MainSub1(); } }
class MainSub2 extends Main { static { m = new MainSub2(); } }
一个严肃的答案是为每个子类编写一个单独的main
,但让它调用一个接受适当实例的公共继承方法。