【问题标题】:Finding name of subclass running Main查找运行 Main 的子类的名称
【发布时间】:2012-07-12 17:19:48
【问题描述】:

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

【问题讨论】:

    标签: java reflection subclass main


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

    【讨论】:

    • 问题是,静态方法中没有“当前实例”。那么这是如何工作的呢?
    • 哦,我现在明白了。 OP 想要重用 main 方法。嗯。然后真的没有任何帮助。或者有没有……
    • @cHao 用一个公认的丑陋肮脏的伎俩重写了答案。
    • 是的,这确实很脏,但我想它现在必须工作:) 谢谢。
    猜你喜欢
    • 2022-01-22
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多