我有一个称为Trader的抽象类,它的作用类似于带服务器(StockMarket)的客户端,并且我想在Trader类中声明继承自该类的所有类都需要实现一个主入口点,以便它们可以跑。

问题是,如果我写:

public static abstract void main(String[] args) throws Exception;


它给出一个错误,仅允许可见性修改器。但是,如果我删除了静态修饰符,则它不能作为允许它运行的主要入口点。

那么如何声明抽象类的所有子类必须实现main方法?

最佳答案

你不能

我要做的是在Trader中声明一个抽象的非静态方法:

public abstract void run(String[] args) throws Exception;


然后声明一个单独的将实例化实例的主类,并调用run方法:

class RunTrader {
    private static final String DEFAULT_CLASS = "...";

    public static void main(String[] args) {
        try {
            String className = System.getProperty("main-trader-class", DEFAULT_CLASS);
            Class<Trader> traderClass = (Class<Trader>)Class.forName(className);
            Trader trader = traderClass.newInstance();
            trader.run(args);
        } catch (Exception e) {
            // handle the exception
        }
    }
}

10-08 11:45