2

クラス A、クラス B、クラス C のような 3 つのモデル クラスがあり、同じ変数と同じセッター メソッドとゲッター メソッドがあります。

3 つのモデルすべてに getname() および setName(String s) メソッドがあります。

もう1つは、1つのメソッドを作成したコントローラークラスです。以下に言及するように:

public void method1(Object obj)
{
 String s = obj.getname();
}

ここで、method1(A a)、method1(B b) などのモデル クラス パラメータを渡して、このメソッドを呼び出したいと思います。

別のクラスインスタンスを渡して上記のメソッドを再利用したい。

以下では、私が望むシナリオ全体について言及しています。

 public class Controller {
   public void method1(Object obj)
   {
     String s = obj.getname();
   }

   public void callingMethod()
   {
     if(somecondtion)
     { 
       method1(new A());
     }
     if(somecondtion)
     { 
       method1(new B());
     }

     if(somecondtion)
     { 
       method1(new C());
     }

   }

上記のコードを実行すると、Java は「メソッドを解決できませんでした」というエラーを表示します

上記の問題をどのように達成できますか?

ありがとう

4

2 に答える 2

5

同じ署名で一般的なインターフェイスを作成します。クラス A、B、C にインターフェイスを実装します。次に、インターフェイスを渡します。一般的な例として

これは、すべての一般的な署名を備えたインターフェースです。

interface Root{
   commonMethods();
}

ルートを実装したクラス A、B、C は次のとおりです。

class A implements Root{
{
   commonMethods(){
       // implementations
   }
}

class B implements Root{
{
   commonMethods(){
       // implementations
   }
}

class C implements Root{
{
   commonMethods(){
       // implementations
   }
}

今、それらを使用する必要がある方法で

public void method1(Root obj)
{
     obj.commonMethods();  // call the method
}  

したがって、次のように呼び出す必要があります

method1(new A());
method1(new B());

これで、パラメーターとして渡した A または B クラスに対して commonMethod() が呼び出されます

最後に、このデザインは戦略デザインパターンと呼ばれます

アップデート

私の個人的な提案は、上記のソリューションを実装することでした。ただし、使用したくない場合は、次のように単純に使用できます

public void method1(Object obj)
{
 String s = "";
 if(obj instanceof A)
     s = ((A)obj).getname();
 if(obj instanceof B)
     s = ((B)obj).getname();
 if(obj instanceof C)
     s = ((C)obj).getname();
}
于 2013-06-01T07:32:10.687 に答える
0

これはあなたが探しているワットですか?

interface IRoot{
string GetName();
}

public void method1(IRoot obj)
{
String s = obj.GetName();
}

または、文字列パラメーターを使用してメソッドを呼び出すこともできます。

public void method1(String s){}
于 2013-06-01T10:26:56.150 に答える