假设我有两个类A和B.两个都是相同的(相同的属性,方法等),但它们的名称不同。
在Java中,有一种安全的方法可以将B对象转换为A对象吗?
答案 0 :(得分:8)
不,如果它们属于不同的类层次结构,则不能将其中一个转换为另一个。它们不相同,即使它们发生以共享相同的属性和方法。此外,如果它们属于同一个类层次结构,但一个不是另一个的超类,则不能在同一个类层次结构中进行转换。在层次结构中只有向上转换和向下转换。
但是,如果
,您可以将任一类的对象传递给某个方法(这是polymorphism的基本前提。)
答案 1 :(得分:3)
不,你不能,除非他们有一个具有相同属性的公共父级,但你可以使用copyProperties()
中的common.beanutils方法将每个属性从一个bean传递到另一个bean。
另一种方法是为A创建一个子类,它可以将调用委托给B,反之亦然。
第三种方法是使用proxy。
但最后两个解决方案仅适用于方法调用,如果您的属性是公开的,则无法执行任何操作。
答案 2 :(得分:1)
可能您可以使用反射来复制属性。 然后,创建一个包装函数来“强制”该类;例如:
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;
}
注意:
答案 3 :(得分:0)
从形式上讲,两个Java类可以相同的唯一方法是它们是否满足标识a == b。根据定义,具有相同成员和不同名称或包的两个类不会这样做。
答案 4 :(得分:0)
唯一的方法是手动将A类中的数据设置为B类中的数据