我想创建一个方便的父类(super class),它将创建任何 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 调用 main 时(从命令行$ java MainSub1
),会创建一个 MainSub1 对象,等等
当我写这篇文章时,我发现 this线程中接受的答案说它无法完成,但当然它可以通过某种方式通过反射或其他方式完成,对吧?
最佳答案
我并不是真的推荐它,但它有一个肮脏的技巧:
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
,但让它调用一个接受适当实例的公共(public)继承方法。
关于java - 查找运行 Main 的子类名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457177/