在Python中,您可以通過__file__
獲取正在執行的文件的路徑是否存在Java等價物?什麼是python的__file__,__name__和Object .__類__.__ name__的java等價物?
還有一種方法可以獲得當前包中的類似__name__
?
最後,java introspection有什麼好的資源?
在Python中,您可以通過__file__
獲取正在執行的文件的路徑是否存在Java等價物?什麼是python的__file__,__name__和Object .__類__.__ name__的java等價物?
還有一種方法可以獲得當前包中的類似__name__
?
最後,java introspection有什麼好的資源?
this.getClass()=當前類
this.getClass()。getPackage()=當前包
Class.getName()=類名
Package.getName()=包名稱的字符串的字符串
我相信你正在尋找Reflection API以獲得相當於自省(http://download.oracle.com/javase/tutorial/reflect/)。
@克里斯托弗的答案解決了類名的問題。
AFAIK,標準的Java類庫沒有提供直接的方法來獲取對象類的文件名。
如果類是用適當的「-g」選項設置編譯,你可以潛在得到的類文件名間接如下:
Throwable.getStackTrace()
獲取異常的堆棧跟蹤信息。StackTraceElement.getFilename()
來獲取源文件名。請注意,這可能很昂貴,並且不能保證文件名將被返回,或者它將成爲您期望的文件名。
你可以得到(不含包)包含類文件的文件夾:
SomeClass.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm();
您可以使用反射來瀏覽堆棧跟蹤:
new Throwable().getStackTrace()[1].getFileName()
new Throwable().getStackTrace()[1].getClassName()
new Throwable().getStackTrace()[1].getMethodName()
new Throwable().getStackTrace()[1].getLineNumber()
我一時舉不出我這個源,但我確實記得,如果你決定做這樣的事情(並且請保持它不在生產級代碼中),你可以通過使用本地異常(例如NullPointerException)來加速它,而不是簡單地構建你自己的,因爲native例外已被緩存(對原作者'部分)。 IE:try {Object o; o.toString(); } catch(NullPointerException e){}比嘗試更快{throw new Exception(「foo」)} catch(Exception e){} – cwallenpoole 2010-10-26 01:19:04
這是行不通的。該異常需要以正常的方式實例化,以允許您捕獲當前上下文的堆棧跟蹤信息。不管你是簡單地構造它還是做一些事情來構建JVM構造都沒有什麼不同。 (事實上,我懷疑後者實際上會比較慢,因爲必須拋出異常並將其捕獲。) – 2010-10-26 02:16:05