正在查找运行Main的子类的名称



我想制作一个方便的超级类,它将创建从哪个子类运行的实例,而不必硬编码子类的名称。做这件事最快的方法是什么?

我们可以假设子类的构造函数将具有相同的签名,例如没有参数。

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对象,等等。

在我写这篇文章的时候,我发现了这个线索,公认的答案说这是不可能的,但它当然可以,以某种方式,通过反思或其他什么,对吧?

我并不是真的推荐它,但它有一个肮脏的技巧:

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

相关内容

  • 没有找到相关文章

最新更新