【发布时间】:2013-06-26 13:33:32
【问题描述】:
我有以下课程。
abstract class A{}
class B extends A{}
class C extends A{}
我需要创建一个像这样的对象
A a = new B();
我在运行时得到子类的类名。所以,我需要使用反射来创建一个对象。
我已经做到了。
Class<?> klass = Class.forName(className);
现在我无法将此类转换为子类。
我要实现
A a = klass.newInstance(); // returns Object
我希望将对象转换为子类(B 或 C,取决于运行时)
我该怎么做?
【问题讨论】:
-
A a = (A)klass.newInstance();有什么问题? -
@AleksG 我需要访问子类中的函数。
-
switch (name) { case "B": return new B(); case "C": return new C(); default: throw new SomeException(); }有什么问题? /Class.newInstance有什么问题?很多。如果您正在使用Constructor.newInstance,最好先使用asSubclass。 -
因为无论如何你都在使用反射,所以你实际上不必强制它们来使用子类中的函数......
-
@rgksugan 反射没有什么干净的。
标签: java reflection casting