Java:传递子类类型作为Main()的参数



public static void main(String args[])args[]中,我想指定要实现的子类。如何将args[] (a String)的参数转换为类声明?

例如,如果args[0] = "Subclass1",那么我需要在下面声明:
BaseClass b = new Subclass1()

这在Java中可能吗?

编辑
为了使这一步更加复杂,这些子类来自外部.jar。是否有任何方法可以动态导入子类,或者它们需要事先导入?

类名应该是类的完整路径,即[package]。[classname]您可以使用Class.forName([class name]).newInstance();

public static void main(String[] args) {
    if (args.length > 0) {
        // exceptions handling omitted
        Class<?> clazz = Class.forName(args[0]);
        // check before casting
        if (BaseClass.class.isAssignableFrom(clazz)) {
            BaseClass instance = (BaseClass) clazz.newInstance();
            // use
        }
    }
}

注意,className应该是类的完整路径,即不仅是Subclass1,还有your.package.Subclass1

如果您的主类名为com.acme.app.Main,并且它有public static class Subclass1的子类,则使用以下代码片段:

Class<?> cls = Class.forName("com.acme.app.Main$"+args[0]);
Object instance = cls.getConstructor().newInstance();

通过$标记访问内部类。

请注意,cls.getConstructor().newInstance()比旧的cls.newInstance()更推荐。

如果你知道你的内部类实现或扩展了某个接口或类,那么你可以使用Class<MyInterface>MyInterface instance来代替一般的对象。

相关内容

  • 没有找到相关文章

最新更新