相同的类铸造?
回答
不,如果它们属于不同的类层次结构,则不能将其转换为另一个。他们是不一样,即使他们发生共享相同的属性和方法。此外,如果它们属于相同的类层次结构,那么但是不是另一个的超类,也不能跨同一类层次结构进行投射。在层次结构中只有向上转换和向下转换。
但是,您可以通过两种类的对象一定的方法,如果
- 他们实现相同的接口,或扩展同超,和
- 该方法接受一个参数就是接口的或超类的类型
(这就是的polymorphism的基本前提。)
这不是多态的基本前提,它是一个java事物。 A和B是彼此的子类型,它们之间的铸造是无痛的。 – 2015-06-22 15:54:25
@double_squeeze它在哪里说A和B是彼此的子类型? – Sentry 2017-09-12 22:37:36
@Sentry他们是平等的,因此他们是彼此的子类型。 – 2018-01-05 16:37:11
,你不行,除非他们有一个具有相同属性的公共父项,但您可以使用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,所以上述应被视为伪码多跌少,尤其是JS风格的体现。
- 我建议你改用一个接口;他们是专门做你想做的事情(当然还有更多)。
正式来说,两个Java类可以相同的唯一方法是如果它们满足标识a == b。根据定义,具有相同成员和不同名称或包的两个类别不这样做。
唯一的办法是手动将A类数据设置为B类数据。
- 1. 在Java中的类型铸造/铸造
- 2. 铸造类
- 3. C++类铸造
- 4. 铸造对象相同类型和性能
- 5. 从所有相同尺寸类型铸造时发出警告
- 6. Android Java类铸造
- 7. Windbg类型铸造
- 8. SQL类型铸造
- 9. Python类型铸造
- 10. 类型铸造datetime
- 11. Oracle类型铸造
- 12. Java类型铸造
- 13. 不同的铸造行为
- 14. Microsoft Velocity在相同类型的不同版本之间进行铸造
- 15. 的reinterpret_cast,铸造弟弟类
- 16. MooTools中的类铸造?
- 17. c中的类型铸造#
- 18. 铸造超类的Java
- 19. 类的继承和铸造
- 20. Java的铸造接口类
- 21. 铸造类型的麻烦
- 22. C++相互依存的类模板,指针铸造派生类
- 23. 类型铸造问题
- 24. Javascript数组类型铸造
- 25. 类型铸造自我
- 26. 铸造和类型问题
- 27. 铸造基类引发InvalidCastException
- 28. 问题类型铸造
- 29. 了解类型铸造
- 30. 铸造返回类型
不可以。为什么你想要呢? (除非你的意思是一个扩展另一个,或者让它们都实现一个通用接口。) – 2010-10-09 22:20:21
+1为通用接口 – dsolimano 2010-10-09 22:30:16