2012-02-24 98 views
3

有誰請讓我知道我們什麼時候應該使用:對象getClass()。getMethod的用途是什麼?

Object.getClass().getMethod (action, null); 

我發現這個屬於Java反射包。我在問這個問題,因爲在我們現有的應用程序中,我們有這個代碼,但是我找不到它的用途。

Method action = null; 
try { 
    action = getClass().getMethod (action, null); 
} 
catch (NoSuchMethodException x) { 
} 
return (TAPResponse) action.invoke (this, null); 

在這種情況下,這是幹什麼的?

爲什麼是這樣return語句?什麼會被退回?

+5

我懷疑這是現有應用程序中的代碼,因爲'getMethod'需要一個方法名稱作爲'String'而不是一個方法對象。 – stryba 2012-02-24 12:25:23

+0

是的,這是我的應用程序內的代碼。 – Kiran 2012-02-24 12:41:43

+0

嗨,非常感謝你的回覆,但是有沒有人可以告訴我爲什麼返回類型是這樣的? (因爲invoke是java.lang.reflect.Method類的一部分,什麼是TAPResponse在這裏 – Kiran 2012-02-24 12:47:58

回答

-1

您的代碼不正確,無法編譯。

看的Javadoc類。它僅具有一個稱爲getMethod方法:)

getMethod(String name, Class<?>... parameterTypes) 

它不具有稱爲getMethod(方法,其有一個方法對象作爲第一參數。

0

我希望你錯過了代碼出現的一部分,否則調用將是:

action = getClass().getMethod(null, null); 

這將讓你一個NullPointerException。 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getMethod(java.lang.String,java.lang.Class ...)

getMethod在給定的類中找到一個方法,第一個參數是方法名,其餘參數是參數類型。

你的代碼所做的是,它試圖通過給定的名稱,以獲取類的方法(即不應該採取行動...真的,那麼它是複製粘貼的問題?),並調用它放在你的類當前實例(this)。

此方法不接受任何參數,所以null作爲既getMethod的第二個參數被傳遞並調用(它是多餘的,可以被遺漏的)。

0

我懷疑這個代碼編譯。看看java.lang.Class#getMethod(...)

public Method getMethod(String name, 
        Class... parameterTypes) 
      throws NoSuchMethodException, 
        SecurityException 

它需要在類的公共方法和參數是上述方法需要的類型的名稱。它返回Method對象,該對象可以通過傳遞此方法所屬的對象的實例和它所需的參數來調用。

這是你的代碼試圖做什麼。 (失敗,似乎)

0

的其他意見談了java.lang.Method的文檔。就代碼的含義而言:

在您指定的代碼中,基本上是試圖獲取名爲「actionName」的方法(我認爲這是一個錯誤的btw,無論如何),然後調用該方法。如果你想避免做很多if-else,這很有用。

代替例如,:

如果( 「第一」。equals(actionName))first();

else if(「second」.equals(actionName))second();

.....

您可以與您粘貼的代碼替換它。這樣你不必修改任何代碼,只需添加一個新的方法,它將作爲一個新的操作來支持。

只要您確保「actionName」已被清理(例如,您最終不會調用類似deleteAll),那麼這是一種好方法。