我目前正在尝试在python中访问java中的静态类。我正常导入,然后我尝试获取java类的类实例。
from com.exmaple.util import Foo
Foo. __class___.run_static_method()
这似乎不起作用。建议?我究竟做错了什么。
答案 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() { ... }
}