我想指定要实现哪个子类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来代替通用对象。