在java中使用反射强制转换类
我有以下课程
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
,由运行时决定)
我该怎么做
# 1 楼答案
可以使用泛型来声明
那你就可以写作了
但是,由于
Class.forName
没有关于类的类型信息,也没有声明类型推断,因此您将收到“unchecked cast”警告。这种方法的类型安全性并不比将第二行的结果向下转换为A
更高# 2 楼答案
拥有类型为} 方法,使用
Class<T>
的klass
对象,您可以调用^{例如,您有
a
类型的B
,您在运行时将a
强制转换为B
类型