Java.lang.Class.cast不返回已转换的对象

时间:2015-02-28 23:54:12

标签: java reflection casting

我正在尝试使用Java.lang.Class.cast将对象强制转换为其超类,但我得到了相同的对象。可能是什么原因?

这是我正在运行的代码:

public static void parse(Object obj)
{
    // parse all super classes
    Class<?> clazz = obj.getClass().getSuperclass();
    if (!clazz.equals(prevClass))
    {
        prevClass = clazz;
        Object castedObj = clazz.cast(obj);
        parse(castedObj);   
    }
    fillObject(obj);
}

但是当向parse传递动态类型B的对象时,其中B延伸A,castedObj等于obj。 但我希望castedObj成为动态类型A的新对象,因为parse方法依赖于该事实(迭代动态类型类的字段)。

1 个答案:

答案 0 :(得分:2)

  

我正在尝试使用Java.lang.Class.cast将对象强制转换为其超类,但我得到了相同的对象。

这正是应该发生的事情。

对于引用类型,强制转换只是一种类型检查。例如:

  A a = (A) b;

这表示要检查b是否为A并分配参考,以便我们可以使用A将其称为a

没有对象转换。没有创建新实例。分配给a的值在各个方面与b中的值相同。

使用反射进行类型转换时,同样适用。

或者换句话说,getClass()为给定对象返回的值总是相同的......无论你如何投射都是。


目前尚不清楚您在代码中尝试做什么,但我们假设fillObject填写了与特定类相关的字段,那么您很可能需要传递{{1} }作为显式参数。真正的Class类始终是对象的实际类......无论是否有任何演员。