Java 使用反射动态地投射对象

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.

有人能解释一下为什么这段代码不起作用并抛出错误:不兼容的类型:对象无法转换为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.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);