-2
A
回答
1
反射可以是非常有用的,但如果你不明白它會非常複雜。
如果你有類的名稱,並且要打印的方法:
Class c = Class.forName(the_class_name);
for(Method m : c.getMethods()) {
System.out.println(m.toString());
}
如果你想獲得任何對象的類的名稱:
String className = the_object.getClass().getName();
的組合兩個可能看起來像這樣:
for(Method m : the_object.getClass().getMethods())
System.out.println(m.toString());
我想你所要求的是所有方法的名稱從A
那B
調用。
這不能真正做到反思,主要是因爲Java沒有提供任何方法來做到這一點。
The API一如既往提供更多信息。如果你通過那裏看,你可能會想出一個簡單的解決方法。
1
「A級或B級調用的所有函數的類」令人困惑。但是,如果您想將調用方的類和函數名稱設置爲A
中描述的方法detectsName
,那麼下面的代碼將對您有用。
public class A {
public void detectsName() {
Throwable t = new Throwable();
StackTraceElement traceLine = t.getStackTrace()[1];
// t.printStackTrace();
String className = traceLine.getClassName();
String methodName = traceLine.getMethodName();
int lineNumber = traceLine.getLineNumber();
System.out.println(className);
System.out.println(methodName);
System.out.println(lineNumber);
}
}
如果您從任何其他類這種方法說 - B,它會被檢測到。
public class B {
public static void main(String[] args) {
A a = new A();
a.detectsName();
}
}
3
您不能使用Java反射來執行這樣的靜態代碼分析任務。反射API不提供所需的信息。
關閉我的頭頂,我能想到的,將工作兩種方法:
如果只有「.class」的文件,那麼你可以使用一個字節碼的庫,例如BCEL到加載類並遍歷它們以識別所有的方法調用。
如果您有源代碼,您還可以使用一些現有的Java分析器庫爲您的代碼創建AST並分析它們。
(第一種方法可能是簡單的,如果你想要的是類和方法名的列表。)
0
Dependency Finder這個可以做查詢。它的方法是用XML生成元數據,然後使用基於正則表達式的比較。您可能正在專門尋找名爲「封閉」的功能,並帶有入站引用。
相關問題
- 1. 獲取函數名稱
- 2. LuaBind獲取函數名稱
- 3. BCEL - 獲取類名稱,元素名稱和方法名稱
- 4. R獲取函數參數的名稱
- 5. 獲取子類的名稱
- 6. 獲取coffeescript類的名稱?
- 7. 使用.net獲取名稱表,名稱列,名稱數據
- 8. 獲取對象名稱和函數名稱
- 9. 獲取裝飾函數的名稱?
- 10. 獲取函數的名稱空間
- 11. JavaScript - 獲取調用函數的名稱
- 12. 獲取當前VBA函數的名稱
- 13. jQuery +獲取函數的名稱
- 14. 獲取注入CFC的函數名稱?
- 15. 如何獲取函數的名稱?
- 16. 獲取子類名稱?
- 17. 獲取父類名稱?
- 18. Parse.com:獲取Parse.Object類名稱
- 19. 獲取類名稱+繼承
- 20. 按名稱獲取類型
- 21. 獲取類名稱在Django
- 22. 獲取JSTL中數組的類名稱
- 23. 捕獲函數名稱
- 24. django:getattr函數(獲取字段名稱)
- 25. 按名稱獲取函數描述符:
- 26. 動態獲取函數名稱
- 27. 從DLL獲取函數名稱
- 28. 在javascript中獲取函數名稱
- 29. 在Swift中獲取函數名稱
- 30. 從自己獲取函數名稱
目前還不清楚問題是什麼,請更新您的問題,以使您試圖做得更清楚。也請張貼你已經嘗試過的代碼。 – 2012-03-07 04:51:40
你想在運行時執行此操作嗎?通過靜態分析?到目前爲止,你已經發布的這個標準並不是真正的問題。 – 2012-03-07 05:02:05
@JimGarrison我想通過靜態分析來做到這一點。 – Saurabh 2012-03-07 05:07:54