2013-05-30 119 views
0

我想只從它的名字,我使用的代碼知道該方法的返回類型,但它並沒有爲我工作(它總是返回null):我怎樣才能知道只有它的名字的方法返回類型?

public Object getType(String key) throws Exception { 

     Object returnType = null; 
     String name = key; 
     Method[] methods = name.getClass().getMethods(); 
     for(int i =0; i < methods.length ; i++){ 
      if(key.equals(methods[i])){ 
       returnType = methods[i].getReturnType(); 
      } 
     } 
     return returnType; 
    } 

回答

1

你錯過了兩件事。相反

key.equals(methods[i]) 

應該是:

key.equals(methods[i].getName()) 

和第二件事,在我看來是正在調查的一類(代碼查找方法java.lang.String中)。所以方法應該是這樣的:

public Object getType(String methodName, Class<?> clazz) throws Exception { 
    String name = methodName; 
    Method[] methods = clazz.getMethods(); 
    for (int i = 0; i < methods.length; i++) { 
     if (name.equals(methods[i].getName())) { 
      return methods[i].getReturnType(); 
     } 
    } 
    return null; 
} 

,並調用它像:

type = getType("someMethodName",YourClass.class); 

type = getType("someMethodName",YourObject.getClass()); 
+1

笑,搜索的字符串類是一個大白癡:d –

3

相反的:

if(key.equals(methods[i])){ 

你應該有

if(key.equals(methods[i].getName())){ 

還小的提升可以在代碼中進行,你不需要returnType局部變量,你不需要ITER通過所有其餘的方法吃了,當你已經找到你正在尋找的方法,因此代碼可能是:

public Object getType(String key) throws Exception { 
    String name = key; 
    Method[] methods = name.getClass().getMethods(); 
    for(int i =0; i < methods.length ; i++){ 
     if(key.equals(methods[i])){ 
      return methods[i].getReturnType(); 
     } 
    } 
    return null; 
} 
+0

我仍然給我空 –

1

很多事情是不對您的嘗試;你似乎在任意選擇調用方法,直觀地判斷他們做了什麼。請查閱您以前從未使用過的所有JDK方法的Javadoc。

  1. name.getClass()返回反映java.lang.String的對象。你需要Class.forName(name);

  2. 如果你不知道該方法應該是什麼類的成員,那麼你的整個方案不可能工作。如果你的字符串同時包含類名和方法名,那麼你需要解析它來區分這兩個名字;

  3. klass.getMethods()只會給你公開的成員方法。這可能是也可能不是你所追求的。也有getDeclaredMethods(),但這個不給你繼承的方法。

相關問題