我知道我可以像这样用Jython实现Java接口:
class MyListener (Listener):
def foo(self, event):
print(str(event))
Python具有一流的功能,因此看起来有点过分 - 特别是对于具有一种方法的接口。有没有办法只传递lambda或在接口中实现单个方法的函数?
答案 0 :(得分:3)
从Jython 2.5.2(beta 2)开始,Jython函数作为单一方法Java接口的实现工作。来自http://www.zyasoft.com/pythoneering/2010/09/jython-2.5.2-beta-2-is-released/:
Python函数可以直接传递给采用单个方法接口的Java方法(例如Callable或Runnable)。这意味着您现在可以传递一个回调函数,通常是一个闭包,而不是将它包装在实现该接口的类中。 Tobias Ivarsson实现了这一功能。
答案 1 :(得分:1)
根据在线示例,可以使用AWT / Swing Event界面。只需使用正确的参数创建一个闭包,传递它,Jython应该完成剩下的工作。不幸的是,我没有成功地为自我声明的接口复制这种行为,因为我总是得到“TypeError:arg无法被强制”的异常。
我也非常想知道这是否可能,如果可能,我做错了什么。