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

时间:2013-03-01 15:56:36

标签: java class subclass main

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

例如,如果String = args[0],那么我需要在以下某处声明:
"Subclass1"

这可以用Java吗?

修改
为了使这一步更加棘手,这些子类来自外部BaseClass b = new Subclass1()。有没有办法动态导入子类,还是需要事先导入它们?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

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应该是该课程的完整路径,即Subclass1your.package.Subclass1

答案 2 :(得分:2)

如果您的主要类名为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代替常规对象。