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

时间:2012-06-20 19:19:06

标签: java casting abstract

我有一个有趣的情况,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投射到狗,但是当java.lang.ClassCastException时获得Dog d = (Dog) dogTemplateInstance。我完全理解为什么会发生这种异常,所以请不要打扰告诉我原因。

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

2 个答案:

答案 0 :(得分:2)

由于DogTemplate甚至不会延伸Dog,因此Dog无法投放到DogTemplate。只有一个Dog实例可以投射到狗身上。

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

答案 1 :(得分:0)

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

然后你就可以投下DogTemplate - &gt; IDOG。