2016-12-29 62 views
0

我想創建一個類,它只是將函數調用轉發給它所包含的列表中的每個項目。轉發所有列表項的函數調用

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

應導致以下代碼::

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

和呼叫

interfaceFooForwarder.foo2("hello"); 

應導致可調用的功能由一個接口 因此,例如,(僞代碼)宣佈在

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

正如你所看到的那樣:調用應該如何變化的模式始終是一個具有相同調用和參數的foreach循環。可轉發呼叫受到給定接口的限制(這裏是InterfaceFoo - 或eg.InterfaceBar)

一個重要的細節是,函數調用者不應該能夠有所作爲,無論他是否調用一個對象,直接實現接口或本例中的一組對象/對象列表。

我怎麼能在Java中做這樣的事情? 我想我會需要代表(?),但我無法弄清楚我會如何正確地在這裏應用它們。

編輯:

我不想單獨實現foo1和foo2的。我們的目標是,告訴本機一次「什麼函數調用來了,做對列表中的所有元素」

而且,我會認爲,每一個函數返回一個空

回答

0

,如果我理解正確的你的問題:

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