通过jython访问Python中的静态java方法

时间:2010-11-25 17:26:47

标签: java python jython

我目前正在尝试在python中访问java中的静态类。我正常导入,然后我尝试获取java类的类实例。

from com.exmaple.util import Foo

Foo. __class___.run_static_method()

这似乎不起作用。建议?我究竟做错了什么。

5 个答案:

答案 0 :(得分:1)

尝试使用

Foo.run_static_method()

答案 1 :(得分:1)

我想你创建了一个类的实例,只需要调用该方法。

from com.example.util import Foo

foo = Foo()
foo.run_static_method()

假设只做Foo.run_static_method()不起作用。

答案 2 :(得分: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的静态方法。

答案 3 :(得分: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() {
         ...
     }

}

答案 4 :(得分:0)

我也遇到了这个问题。有一个问题,其他答案者不知道。如果Java 没有关键字public,那么它的静态方法将无法用于Jython。这是令人困惑的,因为它独立于方法本身是否公开,以及访问非显式公共类工作的其他方式,例如实例化。总之,这样做:

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

不是这个:

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