2016-07-27 2 views
0

現在、オブジェクトがX、Y、Zのインスタンスであるかどうかをチェックしていて、いくつかのメソッドを適用しています。どのように私はそれを因数分解の周りに行くと車、バス、自転車、電車、飛行機、...):(これらは私が(例と比較する300個のオブジェクトを持っているがあればちょうどイラスト:)JAVA - リストを使用して複数の "instanceof"をリファクタリングする

if (X instanceof Car || X instaceof Bus || ...) { 
    X.color = RED; 
} 

ですか?

Car car = new Car(); 
Bus bus = new Bus(); 
... 
List<Transportation> list_t = Arrays.asList(car, bus, ...); 
for (Transportation t : list_t) { 
    if (X instance of t) 
     X.color = RED; 
} 

任意の提案は非常に、感謝を理解されるであろう:私は、リストや配列を作るが、それは少し長いようで初期化を考えました。

+0

これらの種類の「偽」の服がたくさんありますか?クラス階層がありますか、またはサブクラスを持つ型がありませんか? – Bohemian

+0

訪問者パターンを調べることができます。 – Fildor

+0

どうして 'X.color = X.getColor();'?そして、もちろん 'X.setColor();'に変更することができます。それで、車、バスなどは常に赤くなるようにして、削除することができます。 – immibis

答えて

1

共通の親インターフェイスを使用します。

class Car implements DisplayColour { 
    public Color displayColor() { 
      return Color.RED; 
    } 

または可能なすべてのクラスを知っていれば、私はHashMapを使用します。

static final Map<Class, Color> classToColorMap = new HashMap<>(); 
static { 
    classToColorMap.put(Car.class, Color.RED); 
} 
+0

私は不思議です。オブジェクトのどれかがクラスに適切なカラーベースを返す場合、これを一般化することはできますか?たとえば、ある機能があります。 returnClassName(オブジェクトオブジェクト){返すclassName}? 。私は質問の質問者に関連していません。私はこの問題について興味深いだけです。 –

+0

@Optimuskck 'class className = object.getClass()。getName();'を実行するか、 'String className = object.getClass()。getSimpleName();を呼び出します。 –

+0

はい。しかし、あなたが最初に知った関数が、正しいことを理解すれば、最初の関数は特定のオブジェクトのみをチェックします。私は特定のオブジェクトをハードコーディングせずに、特定のクラスに属し、異なる文字列を返す任意のオブジェクトを与えられるまで一般化することはできませんか? 。しかし、私は別の質問をしていることを理解し始めています。ごめんなさい。 –

関連する問題