Jython中的完全限定类名
假设有一个Java类叫做some.module.MyClass,如果在Jython 2.1中导入这个类,可以这样获取它的完整类名:
from some.module import MyClass
print MyClass.__name__
然后会打印出"some.module.MyClass"。
但是在Jython 2.5中,执行同样的代码只会打印出"MyClass"。
要在Jython 2.5中获取完整的类名,我发现可以这样做:
print MyClass.name
这样会打印出"some.module.MyClass"(我猜是调用了java.lang.Class.getName())。
问题是如果MyClass有一个getName方法的话,上面的做法就会失败。
我找到的解决办法是调用
print MyClass.__module__ + "." + MyClass.__name__
不过这个方法比较啰嗦。
如果有人知道更简单的方法(像原来的__name__那样),那就太好了。
注意:我已经知道完整的类名(实际上我已经导入了它)。我想这样做是为了检测类名或位置的变化,比如:
className = "some.module.MyClass" # needs to be changed manually if MyClass is moved
与之相比
className = MyClass.name # no need to be changed if MyClass is moved
1 个回答
0
下面的代码可以正常工作:
print MyClass.canonicalName
它会像预期的那样打印出 "some.module.MyClass"。
在这个情况下,调用的是 java.lang.Class.getCanonicalName 方法。
一般来说,任意一个类有一个叫 getCanonicalName() 的方法的可能性比有一个叫 getName() 的方法要小,所以从原则上讲,getCanonicalName() 更可靠。
print MyClass.name
不过,如果有一种纯 Jython 的简单方法,那就更好了。