我目前正在尝试在Python中访问Java中的静态类。我像平常一样进行导入,然后尝试获取Java类的类实例。
from com.exmaple.util import Foo
Foo. __class___.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() { ... }
}
不要这个:
class foo {
public static void bar() { ... }
}
我想你需要创建一个类的实例,然后在该实例上调用方法。
from com.example.util import Foo
foo = Foo()
foo.run_static_method()
Foo.run_static_method()
无法正常工作。我在一个只包含静态方法的类中遇到了这个问题:
public class foo {
public static void bar() {
...
}
}
在我的情况下,添加一个虚拟构造函数是有帮助的。我猜这是因为Python的特性是类实际上已经是对象了(关于元类在Python中的理解有一篇长文,提供了一些关于类的理解,值得一读,尽管它是一个不同的主题),而jython在运行函数之前尝试将类变成一个对象,即使它是静态的。如果这是真的,那可能是一个bug报告。(我正在测试jython2.5)
更新:我不认为我的理论是正确的,因为我相信Java也有一些纯静态的类。然而,这个解决方案已经两次解决了问题。
使用虚拟构造函数:
public class foo {
public foo() {} //!This dummy constructor did the trick for me
public static void bar() {
...
}
}
Foo.someStaticMethod()
。这对你有效吗?或者在jython中不起作用吗? - thejh