2010-11-25 2 views
4

В настоящее время я пытаюсь получить доступ к статическому классу в java, внутри python. Я импортирую как обычно, тогда я пытаюсь получить экземпляр класса java-класса.Доступ к статическим java-методам в Python через jython

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

Добавление фиктивного конструктор помог в моем случае. Я думаю, это из-за природы питонов, потому что классы на самом деле уже являются объектами (есть long post о метаклассах, дающих некоторые сведения о понимании класса в python, его достойное чтение, хотя это другая тема), и jython пытается сделать класс объект перед запуском функции, если он статичен. Я уверен, что это может быть сообщение об ошибке. (Я тестирую на jython2.5).

обновление: Я не считаю, что мой theroy for theause скорее всего, так как я считаю, что 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() { ... } 
} 
Смежные вопросы