実装は同じですが、名前が異なる 2 つのクラスがあります。それらは生成され、私はそれらを変更することができません:
public class Foo {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Bar {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
これらのクラスにデータを入力する必要があります。それらは同一であるため、単一のクラスまたは参照でそれを行うことを好み、必要に応じて Foo または Bar にキャストします (または、ソリューションがより洗練されていることを願っています)。概念的に:
FooOrBar fob = ????;
fob.setName("XYZ");
Foo f = fob.(???);
Bar b = fob.(???);
私はジェネリックを調べましたが、それは、操作するクラスが本当にわからない場合のためのようです。これを実現するある種のクラスまたは参照を持つことは可能ですか?
7月26日編集:
このようなフォローアップの形式が悪い場合はお詫びします。必要に応じて新しいものを投稿できます。私は Tomasz の Adapter パターンを実装している最中ですが、私の最終ステップは彼のものとは異なります。インターフェイス オブジェクトの条件付き割り当てが必要です。以下は私が持っているもので、これまでのところエラーや警告はありませんが、何らかの理由でこれが良い習慣ではないのでしょうか? おそらく、リフレクションまたはジェネリックを使用して、インターフェイスのクラスを決定する必要がありますか? これは、私のコードだけが呼び出すメソッドになり、条件がわかります。条件付きインターフェイスの割り当てを検索しましたが、あまり見つかりませんでした。
FooOrBar fob; //interface
if (condition true) {
fob = new FooAdapter(); //FooAdapter implements FooOrBar
} else {
fob = new BarAdapter(); //BarAdapter implements FooOrBar
}
fob.setName("XYZ");