我目前正試圖在python中訪問java中的靜態類。我正常導入,然後嘗試獲取java類的類實例。通過jython在Python中訪問靜態java方法
from com.exmaple.util import Foo
Foo. __class___.run_static_method()
這似乎不起作用。建議?我究竟做錯了什麼。
我目前正試圖在python中訪問java中的靜態類。我正常導入,然後嘗試獲取java類的類實例。通過jython在Python中訪問靜態java方法
from com.exmaple.util import Foo
Foo. __class___.run_static_method()
這似乎不起作用。建議?我究竟做錯了什麼。
使用
Foo.run_static_method()
嘗試,我想你創建類的實例,只是調用該方法。
from com.example.util import Foo
foo = Foo()
foo.run_static_method()
假設只是在做Foo.run_static_method()
不起作用。
它是這樣工作的例子:
Jython 2.5.1 (Release_2_5_1:6813, Sep 26 2009, 13:47:54)
[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_22
Type "help", "copyright", "credits" or "license" for more information.
>>> import java.lang
>>> java.lang.System.getProperty('user.dir')
u'/home/vinay'
注意getProperty
是靜態類java.lang.System
的靜態方法。
我就遇上了這樣一類只持有靜態方法:
public class foo {
public static void bar() {
...
}
}
添加在我的情況下幫助虛擬構造函數。我猜這是因爲pythons自然是類實際上已經是對象了(有關元類的一個long post給出了關於python中類的理解的一些細節,它值得閱讀,儘管它是一個不同的主題),並且jython試圖使類成爲儘管它是靜態的,但在運行函數事件之前仍然是對象。如果這是真的,那可能是一個錯誤報告。 (我正在測試jython2.5)。
更新:我不認爲我可能會因爲我相信Java有一些純靜態類。但解決方案解決了這個問題兩次。
與虛擬構造函數:
public class foo {
public foo() {} //!This dummy constructor did the trick for me
public static void bar() {
...
}
}
我就遇到了這個問題,太。有一個問題,其他答覆者不知道。如果Java 類沒有關鍵字public
,那麼它的靜態方法將不可用於Jython。這是令人困惑的,因爲它獨立於方法本身是否公開,以及訪問非顯式公共類工作的其他方式,例如實例化。總之,這樣做:
public class foo {
public static void bar() { ... }
}
不是這個:
class foo {
public static void bar() { ... }
}
在Java中,你可以這樣做:`Foo.someStaticMethod()`這是否對你的工作或不使用Jython的工作? – thejh 2010-11-25 17:32:01