Jython中的完全限定类名

0 投票
1 回答
1014 浏览
提问于 2025-04-17 01:04

假设有一个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 的简单方法,那就更好了。

撰写回答