相同的类投射?

时间:2010-10-09 22:18:34

标签: java class casting

假设我有两个类A和B.两个都是相同的(相同的属性,方法等),但它们的名称不同。

在Java中,有一种安全的方法可以将B对象转换为A对象吗?

5 个答案:

答案 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;
}

注意:

  • 自从我使用Java以来​​已经有一段时间了,所以上面应该被视为伪代码或多或少,尤其是JS风格的反射。
  • 我建议您使用界面;他们是专门做你想做的事情(当然还有更多)。

答案 3 :(得分:0)

从形式上讲,两个Java类可以相同的唯一方法是它们是否满足标识a == b。根据定义,具有相同成员和不同名称或包的两个类不会这样做。

答案 4 :(得分:0)

唯一的方法是手动将A类中的数据设置为B类中的数据