2010-12-17 93 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