java - 查找运行 Main 的子类名称

标签 java reflection subclass program-entry-point

我想创建一个方便的父类(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/

相关文章:

java.net.SocketException : Unexpected end of file from server 异常

java - 如何隐藏额外的细节?

php - PHP 中的命名空间反射

c# - 如何创建动态类型 List<T>

c# - 通过反射转换到泛型接口(interface)

ios - 设置 UITableViewController 的子类

java - 在java中使用bufferedreader在java中读取多个整数

java - Java 中的继承——创建子类的对象也会调用父类(super class)的构造函数。为什么?

C# 子类还是接口(interface)?

iphone - 使 UIView 的背景成为渐变而不使用子类