私の会社のソフトウェアのダウンキャスト問題に直面しており、回避策を見つけることができません。必要時にダウンキャストするには?
私は例を挙げて全体の文脈を提供しようとします:基本的に、私たちは2つのソフトウェアコンポーネントを持っており、BrickHigh、BrickLowとしましょう。 BrickLowはBrickHighからすべてを使用できますが、BrickHighはBricklowを見ることができません。 BrickHighで
AnimalクラスのDAOと(属性の数十)がある:
私は動物を拡張するCatクラス(aswellマップされていない属性の数十を)作成したBrickLowでpublic class Animal .. {
//attributes...
}
。
public class Cat extends Animal {
//attributes
}
マップされた属性ごとにスーパークラス(Animal)を持つことを意図していました。しかし、アプリケーション全体でCatを使用しているので、変更が多すぎるため、私のアプリケーションでは動物クラスを使用できません。
しかし明らかに、私は、Javaが許可していないので、DAOから取得した後、私の動物を猫にキャストすることはできません。
私のBrickHighには私のBrickLowが見えないので、Animal animal = new Cat();可能。
私の最初のアイデアは、パラメータ
public Cat(Animal a) {
super(a);
}
などの動物を取るだろう。しかし、私のコンストラクタは私の動物のクラスである必要がありますどのような猫でコンストラクタを作成することでしたか?それは動作していないようです。
が、これは本当にあまり意味がありませんすべてのちょうどマンボジャンボです。あなたがNDAコードを掲載するのを避けようとしていることを理解していますが、ここであなたが現在持っているのは、説明が難しい単なる理論上の問題です。 – Shark
「母クラス」のような独自のカスタム用語を使用し始めると本当に分かりにくいです(それはスーパークラスですよね?) –
"BrickLowではCatクラスを作成しました"アプリ全体がCatを使用してから変更されます。 *全体的な*をしようとしていることのより良い説明が必要であり、確かに標準的なJava用語を使用することが役立つでしょう。あなたが「BrickLowで私はCatクラスを作成しました」と言うとき、それは内部的な意味ですか? – arcy