2016-12-29 4 views
0

クラスを作成したいだけで、関数呼び出しを含むリスト内の各項目に関数呼び出しを転送します。すべてのリスト項目を順方向に呼び出す

foreach object in list 
    object.foo1(3,4); 

interfaceFooForwarder.foo2("hello"); 

が生じるはずであるコール:

ListObjectForwarder<InterfaceFoo> interfaceFooForwarder; 
interfaceFooForwarder.foo1(3,4); 

次のコードをもたらすはずである。呼び出し可能な機能は、インタフェース したがって例えば(擬似コード)によって宣言されていますin

foreach object in list 
    object.foo2("hello"); 

このように、呼び出しがどのように出力されるかについてのパターンは、常に同じ呼び出しとパラメータを持つforeachループです。転送可能な呼び出しは、指定されたインタフェース(ここではInterfaceFooまたはeg.InterfaceBar)によって制限されています

重要な詳細の1つは、関数呼び出し側は、オブジェクトを1つ呼び出すかどうか、インタフェースを直接実装するかどうかまたはこの例のようなオブジェクトのグループ/リストです。

どうすればJavaのようにすることができますか? 私はデリゲート(?)が必要だと思いますが、ここで正しく適用する方法がわかりません。

編集:私は別にfoo1のとfoo2はを実装したいとは思わないでしょう

。目標は、すべての関数は、私が正しく理解している場合

答えて

0

voidを返すこと、また

、私は仮定します「リスト内のすべての要素でそれを行う、どんな関数呼び出しが来る」一度マシンを伝えることですあなたの質問:

class yourList<T>{ 

    List<T> list = new LinkedList<>(); 

    void generic(String methodName, Object...args){ 
     for (Object obj: list) { 
      try { 

       Class<?>[] classes = new Class<?>[args.length]; 
       for (int i = 0; i < args.length; i++) { 
        classes[i] = args[i].getClass(); 
       } 
       Method mtd = obj.getClass().getMethod(methodName, classes); 
       mtd.invoke(obj, args); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

、あなたはコンストラクタを追加する必要があり、もちろん、ヘルパーメソッドを追加するための要素など

希望の出発点として、このヘルプ

+0

@TheTrowserは意味がありますか? – Lino

+0

申し訳ありませんが、十分に説明していませんでした。私は質問を更新しました:私は具体的にfoo1とfoo2を実装したくありませんでした。むしろジェネリックボディーを持つジェネリック関数呼び出しに似たものがあります。 – TheTrowser

+0

これは良い出発点です!ありがとうございました! – TheTrowser

関連する問題