0

私は、最も深いレベルのサブクラスとして多くのタイプの車両モデルを使用して、約5レベルの深さのJavaBean継承階層を持っています。各車両には約20のフィールドがあります。値に基づいて特定の車両モデルを工場で返品してもらいます。次に、セッターを使用して20個のフィールドのそれぞれを設定する必要があります。ただし、プロパティ、つまりセッターは各モデルによって異なります。これらのモデルはインターフェースを実装していません。たとえそうだとしても、空の具象型を受け取ったインターフェース型でセッターを呼び出すことはできません。具象モデル型への参照を受け取ってセッターを呼び出す方法はありますか?クラスの残りの部分は、他のメソッドを呼び出すためにそのような参照を使用する必要があります。

次のいずれかを受け取りたいのですが。

Camry camry = Factory.get("DL");
Taurus taurus = Factory.get("BC");
Cadillac cadillac = Factory.get("ES");

次に、必要に応じて参照の1つを使用します。cadillac.setStarSystem( "star123"); ..すべてのキャデラック関連のセッター

工場を使用することは必須ではありません。他のテクニックでもかまいません。

ありがとうございました!

4

1 に答える 1

0

戻ってくるタイプがわかっている場合、これは単純なキャストの演習ではありませんか? (「他のテクニックでも大丈夫ですか?」)

Camry camry = (Camry)vehicles.get("DL");
Taurus taurus = (Taurus)vehicles.get("BC");
Cadillac cadillac = (Cadillac)vehicles.get("ES");

cadillac.setStarSystem("star123");

いいえ、これを行うために特定のインターフェイスを使用する必要はありません。示されている/言及されているように、これにより、「具体的なモデルタイプへの参照を受け取り、セッターを呼び出すことができます」ことができます。

(Java 1.5/5.0 で導入されたジェネリックスの不幸な副作用の 1 つは、ユーザーがポリモーフィズムの基本を忘れてしまうことがあるということです。突然、「キャストが悪い」と感じてしまいます。)

于 2012-09-15T00:39:22.593 に答える