0

我想创建一个方便的超类,它将创建一个运行它的任何子类的实例,而不必对子类的名称进行硬编码。最快的方法是什么?

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

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

当我写这篇文章时,我发现这个线程接受的答案说它不能完成,但它当然可以,不知何故,通过反射或其他东西,对吧?

4

1 回答 1

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

于 2012-07-12T17:28:50.377 回答