在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