使用 Clojure reify 提供构造函数

Posted

技术标签:

【中文标题】使用 Clojure reify 提供构造函数【英文标题】:Provide a constructor with Clojure reify 【发布时间】:2011-05-21 01:55:01 【问题描述】:

在 Clojure 中使用 reify 时,如何为构造函数提供表达式?

另外,如何将参数传递给基类构造函数?

【问题讨论】:

【参考方案1】:

您不能使用reify 子类化和实例化类——它仅用于协议和接口。 (不过,您可以提供Object 方法的实现。)

要实例化任意类和/或接口的匿名子类,请使用proxy。代理的超类ctor的所有参数(如果有)进入proxy形式的args向量(第二个参数):

(proxy [SomeClass SomeInterface-1 ...] [ctor-arg-1 ...]
  ; method impls follow
  ...
  )

更多详情请见(doc proxy)

【讨论】:

啊,是的,我的错。我看到了使用 Object 进行 reify 的文档,并天真地尝试在 JComponent 上使用它。我会尝试代理。

以上是关于使用 Clojure reify 提供构造函数的主要内容,如果未能解决你的问题,请参考以下文章

无论如何在clojure中构造一个lambda函数?

尽管在 Clojure 中对 Java 构造函数有类型提示,但仍会出现反射警告

在 Clojure 中模拟现有方法

在 Clojure 中类型提示一个 nil 文字

为啥看似明确的类型提示构造函数调用存在“没有匹配的 ctor”?

Kotlin泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )