如果我有两个相关的类A
和B
这样class B extends A
然后创建一个B
的实例,是否有任何方法可以完全上传它,使它现在是一个有效的实例A
?Java中是否有可能将对象完全转换为其基类型?
B b = new B();
A a = full_upcast_to_A(b);
a.class.equals(A.class)
这是最后一行很重要。我不想通过A
变量引用B
对象。它希望引用的A
对象的外观和行为就像使用new A()
创建的一样。
如果我执行标准A a = (A) b;
,则该对象仍在内部为B
类型,如果您查看.class
或调用任何重写的方法。我不想那样。
A 拷贝基本类A
成为新的A
对象是可以接受的,但不是优选的。
更新:为什么它:
这是一个复杂的局面。我有一个POJO数据类(A
),它是通用代码,但我无法从数据存储加载它,因为这些需要一个@Entity注释,所以我有一个派生类(B
),该类除了注释之外什么也不添加,因此允许存储。但是,我需要通过GWT RPC返回A
,因为客户端不知道B
。 GWT拒绝这样做,因为它只知道如何序列化A
及其接收B
。
B
未包含在可由此SerializationPolicy序列化的类型集中,或者其Class对象无法加载。为了安全起见,这种类型不会被序列化。
简答题:没有。长答案:没有哦。复制是唯一的选择。 –
这会完全破坏重写方法的功能,并且可能会使对象处于不一致的状态,而不会造成错误。例如。 '''toString()''* always *调用类层次结构中最“近”的实现。 –
没有,而且需要这样做,甚至从B创建一个新的A,这表明一个设计缺陷。 B是一个A,根据定义,意味着A不是B.稍微多一些信息可能会导致更好的解决方案。为什么是主要问题。 –