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. この例外が発生する理由は完全に理解していますので、わざわざ理由を言わないでください。

私が知る必要があるのは、このキャストを実現するために 2 つのクラス間の共通の祖先関係を活用する方法があるかどうかです。

4

2 に答える 2

2

を拡張しないため、DogTemplatea を a にキャストする方法はありません。Dog にキャストできるのは Dog インスタンスのみです。DogDogDogTemplate

可能であれば、DogTemplate のすべてのフィールドを Dog にコピーするコンストラクターを使用して、新しい Dog インスタンスを作成できます。または、両方のクラスに共通のインターフェイスを使用することもできます。

于 2012-06-20T19:24:13.790 に答える
0

dog と dogTemplate が同じインターフェースを実装するようにします。このインターフェイスで、Dog のパブリック コントラクト/動作を宣言します。

次に、DogTemplate -> IDog をキャストできるようになります。

于 2012-06-20T19:27:23.907 に答える