查找运行Main的子类的名称

时间:2012-07-12 17:19:49

标签: java reflection subclass main

我想创建一个方便的超类,它将创建任何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线程,其中接受的答案说它无法完成,但当然它可以通过反思或某种方式,对吧?

1 个答案:

答案 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,但让它调用一个接受适当实例的公共继承方法。