2010-11-25 32 views
4

我目前正試圖在python中訪問java中的靜態類。我正常導入,然後嘗試獲取java類的類實例。通過jython在Python中訪問靜態java方法

from com.exmaple.util import Foo 

Foo. __class___.run_static_method() 

這似乎不起作用。建議?我究竟做錯了什麼。

+0

在Java中,你可以這樣做:`Foo.someStaticMethod()`這是否對你的工作或不使用Jython的工作? – thejh 2010-11-25 17:32:01

回答

1

嘗試,我想你創建類的實例,只是調用該方法。

from com.example.util import Foo 

foo = Foo() 
foo.run_static_method() 

假設只是在做Foo.run_static_method()不起作用。

1

它是這樣工作的例子:

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的靜態方法。

1

我就遇上了這樣一類只持有靜態方法:

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() { 
     ... 
    } 

}

0

我就遇到了這個問題,太。有一個問題,其他答覆者不知道。如果Java 沒有關鍵字public,那麼它的靜態方法將不可用於Jython。這是令人困惑的,因爲它獨立於方法本身是否公開,以及訪問非顯式公共類工作的其他方式,例如實例化。總之,這樣做:

public class foo { 
    public static void bar() { ... } 
} 

不是這個:

class foo { 
    public static void bar() { ... } 
}