协议是否可以将新状态引入现有类?

Sta*_*ris 5 clojure

我理解协议如何用于向现有类引入新行为,但是它们(或任何其他Clojure机制)是否可以将状态引入现有类?更具体地说,我希望能够将地图与来自第三方库的类的实例相关联.

pmd*_*mdj 3

协议在概念上与 Java 接口类似,因为它们根本不关心状态或表示,所以我很确定你不能这样做,除非你将状态存储在对象本身之外。但是,您可以使用在 Clojure 中扩展(子类化)类的各种其他方法来执行此操作,例如使用 aproxy或 with gen-class。(参见 http://clojure.org/java_interop#Java%20Interop-Implementing%20Interfaces%20and%20Extending%20Classes