2013-05-02 125 views
0

有一段我沒有寫的Java代碼,我無法改變它使用反射器來調用類的方法。像這樣的東西(我還沒有看到代碼):欺騙反射器

.... 
    params[0] = Something; 
    .... 
    Class c = Class.forName(Name); 
    Method m = c.getDeclaredMethod(MethodName, pt); 
    if (Modifier.isStatic(m.getModifiers())) 
    { 
     res = m.invoke(null, params); 
    } 
    else 
    { 
     obj = c.newInstance(); 
     res = m.invoke(obj, params); 
    } 
    .... 

到目前爲止很好。

我控制類的名稱,方法的名稱和參數。我可以發送這些的任意組合,但有一個問題:第一個參數是硬編碼的,所以我發送的任何參數都會附加到params數組中。所以該方法必須接受該參數。

我的問題是:有沒有辦法創建一個類型並在那裏使用它?這樣的事情:

public class PrintWrapper { 
     public static void println(Somethingtype Something, String arg) { 
      System.out.println(arg); 
     } 
    } 

我試過使用它作爲類的名稱,但它沒有工作,任何想法?我需要某種匿名課程或其他東西。

不,我不能更改源代碼或向系統添加類。我唯一控制的是類的名稱,方法的名稱和其餘參數。

+3

對不起,我不明白你想要做什麼。 – 2013-05-02 13:34:41

+0

'pt'是什麼 - 你需要包括這個爲你的問題是有道理的。 – 2013-05-02 13:35:59

+0

pt是按聲明順序標識方法的形式參數類型的Class對象的數組。這由省略號處理...:D。它的工作 – user2343256 2013-05-02 13:38:52

回答

0

我控制的唯一事情是類的名稱,方法的名稱和其餘參數。

則是答案:

沒有辦法創造一個類型,並在那裏使用它?

+0

太糟糕了。讓我改革這個問題:你認爲有一種方法可以執行那些沒有這種輸入的方法嗎? – user2343256 2013-05-02 13:40:09

+0

當然...請嘗試解釋你想怎麼做 – 2013-05-02 14:09:16

+0

如果我知道我不會問:D – user2343256 2013-05-02 14:21:15