首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure gen-class varargs构造器

clojure gen-class varargs构造器
EN

Stack Overflow用户
提问于 2012-01-21 15:33:41
回答 2查看 1K关注 0票数 8

在:constructors映射和后续的-init定义中,我如何表示一个varargs构造函数(假设超类有多个构造函数,其中一个是varargs)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-07 22:37:42

由于varargs本质上是对象数组的语法糖,您可以只使用"[Ljava.lang.Object;“作为构造函数的参数类型。

下面是一些示例代码:

代码语言:javascript
复制
(ns t.vtest
  (:gen-class
   :implements   [clojure.lang.IDeref]
   :init init
   :state state
   :constructors {["[Ljava.lang.Object;"] []}))
   ;;                                      ^-----------------------
   ;; You should put "[Ljava.lang.Object;" for superclass varargs constructor here
   ;; I left it blank for the sake of working example 

(defn -init
  [args]
  (println "first element of args" (aget args 0) "total elements" (alength args))
  [[] (into [] args)])

(defn -deref
  [this]
  (.state this))

这就是它在REPL中的样子

代码语言:javascript
复制
user=> @(t.vtest. (into-array Object ["A" "B" 1 2]))
first element of args A total elements 4
["A" "B" 1 2]
票数 2
EN

Stack Overflow用户

发布于 2013-09-11 17:48:47

由于clojure目前不支持它,您需要使用以下命令对其进行修补:https://groups.google.com/forum/#!topic/clojure/HMpMavh0WxA.

并将其与新的meta标签一起使用:

代码语言:javascript
复制
(ns t.vtest 
  (:gen-class 
   :implements   [clojure.lang.IDeref]
   :init init
   :state state
   :constructors {^:varargs ["[Ljava.lang.Object;"] []} 
  ))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8951449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档