Java 相同等级的演员?
假设我有两个类A和B。它们都是相同的(相同的属性、方法等),但它们的名称不同Java 相同等级的演员?,java,class,casting,Java,Class,Casting,假设我有两个类A和B。它们都是相同的(相同的属性、方法等),但它们的名称不同 在Java中,有某种安全的方法可以将B对象强制转换为a对象?不,如果它们属于不同的类层次结构,则不能将一个对象强制转换为另一个对象。它们不完全相同,即使它们碰巧共享相同的属性和方法。此外,如果它们属于同一类层次结构,但其中一个不是另一个的超类,则也不能跨同一类层次结构强制转换。在一个层次结构中只有向上和向下转换 但是,如果需要,可以将任一类的对象传递给某个方法 它们实现相同的接口,或扩展相同的超类,以及 该方法接受接
在Java中,有某种安全的方法可以将B对象强制转换为a对象?不,如果它们属于不同的类层次结构,则不能将一个对象强制转换为另一个对象。它们不完全相同,即使它们碰巧共享相同的属性和方法。此外,如果它们属于同一类层次结构,但其中一个不是另一个的超类,则也不能跨同一类层次结构强制转换。在一个层次结构中只有向上和向下转换 但是,如果需要,可以将任一类的对象传递给某个方法
- 它们实现相同的接口,或扩展相同的超类,以及
- 该方法接受接口或超类类型的参数
(这是的基本前提。)不可以,除非它们有一个具有相同属性的公共父级,但是可以使用方法from将每个属性从一个bean传递到另一个bean 另一种方法是为a创建一个子类,该子类可以将调用委托给a B,反之亦然 第三种方法是使用
但最后两种解决方案仅适用于方法调用,如果属性是公共的,则无法执行任何操作。可能可以使用反射来复制属性。 然后,创建一个包装函数来“转换”类;例如:
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风格的反射
- 我建议你改用界面;它们是专门为做你想做的(当然还有更多)