2016-09-06 12 views
0

オブジェクトが必要なタイプであるかどうかをチェックし、ゲッターとセッターを使用したいとします。これは私が今までに思い付いたコードです、それを行うためのより良い方法はありますか?私は引数のためにクラス< < T >>を使ってみましたが、それは私にオブジェクトの適切なインスタンスを与えません。Javaジェネリックオブジェクトのインスタンス化

public <T extends ClassA, P extends ClassB> T setSomething(T c, P ap) {  
      if (c instanceof ChildA1){ 
       if(ap instanceof ChildB1){ 
       //getters and setters here 
      c.setValue(ap.getIntValue()); 
      c.setId(ap.getId()); 
    } 
    } 
else if (c instanceof ChildA2){ 
      if(ap instanceof CHildB2){ 
//getters and setters here 
     c.setValue(ap.getIntValue()); 
     c.setId(ap.getId()); 
} 
} 

UPDATE

イムこのようなコード内の他のこのメソッド呼び出し: a.setSomething(B)を、 bはClassB型であるため、ImはBの子のゲッターとセッターをフェッチできません。

+0

私は混乱しています。ここでの型はどのように関連していますか、これらのgetterとsetterはどのオブジェクトを使用していますか。なぜ、すでに通過しているものをインスタンス化する必要がありますか? – Makoto

+0

あなたは正確に何をしようとしているかを示す完全な例を共有できますか?このコードは*うまくいくはずですが、オブジェクト指向の原則に反します。これを設計するより良い方法があるのだろうかと思います。 – Mureinik

+0

括弧がありません。 – mm759

答えて

0

コードに基づいて、私は//getters and setters hereコードがClassBインスタンスのプロパティを取得し、ClassAインスタンスのプロパティを設定する(またはその逆)と仮定しています。

、例えば、目的はClassBから値を取得し、ClassAでそれらを設定している場合、あなたはClassA階層内assign方法でこれを達成することができます。そして、あなたがそのメソッドをオーバーライドすることができ

public class ClassA { 
    public void assign (ClassB b) 
    { 
     setSomeAProperty (b.getSomeBProperty()); 
     ... 
    } 
} 

ClassAのサブクラス:

public class ChildA1 extends ClassA { 
    public void assign (ClassB b) 
    { 
     super.assign(b); 
     if (b instanceof ChildB1) { 
      ChildB1 b1 = (ChildB1) b; 
      setSomeA1Property(b1.getSomeB1Property()); 
      ... 
     } 
    } 
} 

そして、代わりのsetSomething、ちょうどa.assign(b)を呼び出します。

+0

これを行う良い方法はありますか?コントローラクラスのsetSomething()メソッドを呼び出す – user2340345

関連する問題