我有一个有趣的情况,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。我完全理解为什么会发生这种异常,所以请不要告诉我为什么。

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

最佳答案

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

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

10-04 20:35