繁体   English   中英

从常见的Abstract类扩展的Java类之间的转换

[英]Casting between Java classes extended from common Abstract class

我有一个有趣的情况,EMF迫使我进入:

abstract class AbstractDog{
   ...
}

public class Dog extends AbstractDog{
   < implemented code >
}

public class DogTemplate extends AbstractDog{
   < implemented code identical to Dog >
}

在Dog和DogTemplate中找到的代码完全相同(不要问 - 我们的系统非常依赖于Eclipse的东西,这是唯一的方法)。 我需要从DogTemplate转换为Dog,但是当我做Dog d = (Dog) dogTemplateInstance时会得到java.lang.ClassCastException 我完全理解为什么会发生这种异常,所以请不要打扰告诉我原因。

我需要知道的是,是否有任何方法可以利用两个类之间的共同祖先关系来实现此类强制转换?

由于Dog甚至没有扩展DogTemplate ,因此DogTemplate无法投射到Dog 只有Dog实例可以投射到狗身上。

您可以使用构造函数创建一个新的Dog实例,如果可能的话,它会将DogTemplate的所有字段复制到Dog。 或者您可以使用两个类的通用接口。

使dog和dogTemplate实现相同的界面。 在此界面中,声明Dog的公共合同/行为。

然后你就可以投下DogTemplate - > IDog。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM