2010-03-24 5 views
4

는 내가 같이 자이 썬과 자바 인터페이스를 구현할 수 있다는 사실을 알고 : 그 잔인한 것 같아 있도록Jython : 함수 참조가있는 Java 인터페이스를 구현할 수있는 명확한 방법이 있습니까?

class MyListener (Listener): 
    def foo(self, event): 
    print(str(event)) 

파이썬은 일류의 기능을 가지고있다 - 특히 하나의 방법으로 인터페이스에 대해. 그 대신 인터페이스에서 하나의 메소드를 구현하는 람다 또는 함수를 전달하는 방법이 있습니까?

답변

1

온라인 예제에 따르면 AWT/Swing Event 인터페이스가 가능합니다. 올바른 인수를 사용하여 클로저를 만들고이를 전달하면 Jython이 나머지를 수행해야합니다. 불행히도 필자는 항상 "TypeError : arg can not be coerced"예외가 발생하므로 자체 선언 인터페이스에 대해이 동작을 복제하는 데 성공하지 못했습니다.

나는 또한 그것이 가능한지, 정말로 그렇다면 무엇을 잘못하고 있는지 알고 싶어합니다.

+0

흠, 그것뿐만 아니라 다른 해당하는 경우를 수 있어야한다. devs가 특정 GUI 클래스에만 해킹했을 것이라고 나는 믿을 수 없다 ... – auramo

+0

자이 썬의 스윙 리스너 마술은 내성적으로 작동한다. 이벤트 리스너 등록 패턴과 인터페이스를 이해합니다. 예를 들어'actionPerformed = xxx'는'addActionListener (ActionListener() {actionPerformed() {xxx (event);}))'와 같은 것을 의미합니다. 참으로 해킹이지만 작동합니다. –

3

Jython 2.5.2 (베타 2)부터 Jython 함수는 단일 메소드 Java 인터페이스의 구현으로 작동합니다. http://www.zyasoft.com/pythoneering/2010/09/jython-2.5.2-beta-2-is-released/에서 : 그것은 AWT/스윙을 위해 가능하다면

Python functions can be directly passed to Java methods that take a single method interface (such as Callable or Runnable). This means you can now pass a callback function, usually a closure, instead wrapping it in a class implementing that interface. Tobias Ivarsson implemented this feature.

관련 문제