2011-09-01 64 views
0

假設some.module.MyClass是一個Java類,如果在Jython的2.1原裝進口,其完全限定類名可以這樣得到:完全限定類名Jython中

from some.module import MyClass 
print MyClass.__name__ 

然後「一些。 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 
+0

[在python中獲取對象的完全限定類名]可能的重複(http://stackoverflow.com/questions/2020014/get-fully-qualified-class-name-of-an-object-in-python ) – katrielalex

+0

@katrielalex不是一個重複的東西 - 可能會有一種總是有效的JVM-y方法,因爲'MyClass.name'有時會起作用,並且他們也接受了這個問題的答案。羅嗦了。 – agf

+0

@agf:夠公平的;理想情況下,OP可以編輯以清楚地表明他們正在尋找一種特定於JVM的方法,並且他們知道上一個問題。 – katrielalex

回答

0

以下工作:

print MyClass.canonicalName 

預期這將打印 「some.module.MyClass」。

在這種情況下,調用java.lang.Class.getCanonicalName。

這是不太可能的任意類將有一個名爲另一方面,getCanonicalName於()getName()方法,因此原則上它比

print MyClass.name 

儘管如此,純Jython的簡單方式(更可靠如果存在)也將不勝感激。

相關問題