我想指定要实现哪个子类args[]
。public static void main(String 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>
andMyInterface instance
来代替通用对象。