【发布时间】:2011-04-23 07:44:52
【问题描述】:
假设我有两个类 A 和 B。两者都是相同的(相同的属性、方法等),但它们的名称不同。
在 Java 中有一些安全的方法可以将 B 对象转换为 A 对象吗?
【问题讨论】:
-
不。为什么你还想要? (除非您的意思是让一个扩展另一个,或者让它们都实现一个通用接口。)
假设我有两个类 A 和 B。两者都是相同的(相同的属性、方法等),但它们的名称不同。
在 Java 中有一些安全的方法可以将 B 对象转换为 A 对象吗?
【问题讨论】:
不,如果它们属于不同的类层次结构,则不能将它们转换为另一个。它们不相同,即使它们碰巧共享相同的属性和方法。此外,如果它们属于同一个类层次结构,但其中一个不是另一个的超类,您也不能跨同一个类层次结构进行强制转换。层次结构中只有向上转换和向下转换。
但是,如果
(这是polymorphism的基本前提。)
【讨论】:
不,你不能,除非它们有一个具有相同属性的共同父级,但你可以使用 common.beanutils 中的 copyProperties() 方法将每个属性从一个 bean 传递到另一个。
另一种方法是为 A 创建一个子类,该子类可以将调用委托给 B,反之亦然。
第三种方法是使用proxy。
但最后两种解决方案仅适用于方法调用,如果您的属性是公开的,您将无能为力。
【讨论】:
也许,您可以使用反射来复制属性。 然后,创建一个包装函数来“转换”类;示例:
class A {
public cc=0;
}
class B {
public cc=2;
}
B mycast(A a){
B b=new B();
for(String name in a)
b.setProperty(name,a.getProperty(name));
return b;
}
注意事项:
【讨论】:
正式地说,两个 Java 类可以相同的唯一方法是它们满足恒等式 a == b。根据定义,具有相同成员和不同名称或包的两个类不会这样做。
【讨论】:
唯一的办法就是手动将A类的数据设置为B类的数据
【讨论】: