0

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

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

4

2 回答 2

2

无法DogTemplate将 a 强制转换为 a Dog,因为Dog它甚至不能扩展DogTemplate。只有 Dog 实例可以转换为 Dog。

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

于 2012-06-20T19:24:13.790 回答
0

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

然后您将能够投射 DogTemplate -> IDog。

于 2012-06-20T19:27:23.907 回答