python的__file __,_ ____和Object .__ class __.__ name__的java等价物是什么?

时间:2010-10-25 22:48:45

标签: java

在Python中,你可以获得通过__file__执行的文件的路径是否有java等价物?

还有一种方法可以获得与__name__类似的当前包吗?

最后,什么是java内省的好资源?

4 个答案:

答案 0 :(得分:9)

this.getClass()=当前班级
this.getClass()。getPackage()=当前包
Class.getName()=类名的字符串
Package.getName()=包名称的字符串

我相信你正在寻找Reflection API来获得内省的等价物(http://download.oracle.com/javase/tutorial/reflect/)。

答案 1 :(得分:4)

@ Christopher的回答解决了班级名称的问题。

AFAIK,标准的Java类库没有直接的方法来获取对象类的文件名。

如果使用适当的“-g”选项设置编译类,则可能间接获取类文件名,如下所示:

  • 在其中一个类方法中创建一个异常对象。
  • 使用Throwable.getStackTrace()获取异常的堆栈跟踪信息。
  • 获取当前方法的stacktrace元素,并使用StackTraceElement.getFilename()获取源文件名。

请注意,这可能很昂贵,并且无法保证将返回文件名,或者它将是您期望的文件名。

答案 2 :(得分:3)

您可以获取包含类文件的文件夹(不包括):

SomeClass.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm();

答案 3 :(得分:1)

您可以使用反射来导航堆栈跟踪:

new Throwable().getStackTrace()[1].getFileName()
new Throwable().getStackTrace()[1].getClassName()
new Throwable().getStackTrace()[1].getMethodName()
new Throwable().getStackTrace()[1].getLineNumber()