Java 使用反射动态地投射对象
有人能解释一下为什么这段代码不起作用并抛出错误:不兼容的类型:对象无法转换为aaa吗Java 使用反射动态地投射对象,java,reflection,Java,Reflection,有人能解释一下为什么这段代码不起作用并抛出错误:不兼容的类型:对象无法转换为aaa吗 class aaa {} class bbb extends aaa { } class psp { public static void main(String args[]) { bbb b = new bbb(); Object object = b; Class clazz = aaa.class; //aaa a=clazz.
class aaa {}
class bbb extends aaa {
}
class psp {
public static void main(String args[]) {
bbb b = new bbb();
Object object = b;
Class clazz = aaa.class;
//aaa a=clazz.cast(b); doesnot work
//aaa a=Class.forName("aaa").cast(object); doesnt work
//aaa a=Class.forName("aaa").cast(b);doesnt work
aaa a = (aaa) object;
a = (aaa) aa;
a = aaa.class.cast(b);
}
}
注:我说的是注释代码有两个问题很容易纠正: 将
clazz
声明为Class
,以消除将clazz.cast(b)
转换为aaa
:
Class<aaa> clazz = aaa.class;
aaa a = clazz.cast(b); //works
类clazz
是原始类型。使用Class-clazz
。有人能告诉我为什么我的问题被否决了吗?@TarunRawat你动态地抛出它是什么意思?在java中,强制转换不起任何作用,它只是类型的显式检查。然后,您无法检查某个内容是否属于您不知道的类型。我想动态强制转换它。我该怎么办?@TarunRawat你动态施法是什么意思?在java中,强制转换不起任何作用,它只是类型的显式检查。然后,您不能检查某些内容是否属于您不知道的类型。您可以使用aaa=Class.forName(“aaa”).asSubClass(aaa.Class).cast(b)
它首先检查动态加载的类是否与aaa
兼容。然后,它允许类型安全的cast
,因为动态加载的类的实例也被证明是aaa
的实例。
aaa a1 = (aaa) Class.forName("aaa").cast(object);
aaa a2 = (aaa) Class.forName("aaa").cast(b);