2010-12-17 97 views
3

我有一个应用程序在clojure中大量使用名为Vaadin的Java框架。 Vaadin使用clojure的Java“代理”功能使用多个回调。但是,每次在clojure函数中调用代理时,都会有明显的延迟(有时为100毫秒)。有什么办法可以加快速度吗?缓慢调用clojure代理

+0

你尝试把类型提示? – 2010-12-17 09:27:00

+0

您的意思是为代理名称添加类型提示,或者为实现的方法添加方法参数? – Zubair 2010-12-17 09:53:57

+0

只需打开'反射警告'并将类型提示删除所有警告。 – 2010-12-17 11:25:20

回答

6

我的理解是,新的reify宏比proxy快。如果您只需要实现单个界面,则可以使用它。

例如,如果你需要实现一个java.awt.event.ActionListener你可以使用如下代码:

(import 'java.awt.event.ActionListener 'javax.swing.JButton) 
(let [a-button (JButton. "Click Me")] 
    (.addActionListener a-button 
    (reify ActionListener 
     (actionPerformed [this ev] (comment do something interesting))))) 
+0

由于某些原因,在Vaadin接口com.vaadin.ui.Button $ ClickListener中,reify不起作用。这是beacuase com.vaadin.ui.Button $ ClickListener是一个静态接口? – Zubair 2010-12-17 20:06:21

+0

@Zubair:不确定。在我开始工作之前,我不得不使用reify函数一段时间。我做的最后一件事是添加'this'变量。你得到了什么错误? – Ralph 2010-12-17 20:40:23

+5

实际上,人们可以用一个“reify”形式实现多个接口。与'proxy'的限制是'reify'不能扩展类。 – 2010-12-18 04:11:50