`

关于clojure的gen-class

阅读更多
关于gen-class的参数说明:

:name aname
要生成的类的全限定名

:extends aclass
指定superclass,没有指定默认为Object

:implements [interface ...]
要实现的接口

:init name
指定构造函数名称,必须返回[ [superclass-constructor-args] state]
如果没有指定,则args传给superclass,并且state为nil

:constructors {[param-types] [super-param-types], ...}
指定构造参数的类型

:post-init name
init之后执行

:methods [ [name [param-types] return-type], ...]
定义开放的方法,默认为non-private方法,静态方法加^{:static true}。

:main boolean
指定的main方法。名称为(str prefix main)。prefix默认为减号。也可以自己指定prefix。

:factory name
工厂方法

:state name
存放的state的名称,state是ref或者agent类型。(对应于init中的state。必须要配置init)

:exposes {protected-field-name {:get name :set name}, ...}
暴露get,set方法

:exposes-methods {super-method-name exposed-name, ...}
需要暴露哪些方法

:prefix string
前缀,默认为减号。查找方法要以(str prefix fn-name)为准,所以main方法写成-main。可以认为是public的一个标识符。

:impl-ns name
指定实现方法的ns

:load-impl-ns boolean
默认为true,和impl-ns配套使用

一个例子
(ns com.example )

(gen-class
      :name com.example.Demo
      :state state
      :init init
      :prefix "-"
      :main false
      :methods [[setLocation [String] void]
                [getLocation [] String]])

;;构造函数。state值为:(atom {:location "default"})
(defn -init []
  [[] (atom {:location "default"})])

;;保存字段到state中
(defn setfield
  [this key value]
      (swap! (.state this) into {key value}))

;;从state中获取field
(defn getfield
  [this key]
  (@(.state this) key))

(defn -setLocation [this loc]
  (setfield this :location loc))

(defn  -getLocation
  [this]
  (getfield this :location))

;;main入口,可以在lein中配置:main参数,然后执行lein uberjar来打包一个可执行的jar包。
(defn -main [& args]
  (pritnln "Hello,World!"))

;; 编译后,添加到classpath。当成java类来调用、执行。
user=> (def ex (com.example.Demo.))
#'user/ex
user=> (.getLocation ex)
"default"
user=> (.setLocation ex "time")
nil
user=> (.getLocation ex)
"time"
分享到:
评论

相关推荐

    Clojure入门教程- Clojure – Functional Programming for the JVM中文版

    ### Clojure入门教程知识点概述 #### 一、Clojure简介 - **Clojure**是一种运行在Java虚拟机(JVM)上的动态编程语言,它继承了Lisp家族的强大功能,同时结合了现代编程语言的优点,如面向对象编程和函数式编程。 ##...

    clojure-sha-3-源码.rar

    《Clojure SHA-3 源码解析》 Clojure是一种基于Lisp的现代函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java平台的强大功能。SHA-3,全称为Secure Hash Algorithm 3,是美国国家标准与技术研究所(NIST...

    clojure-maven-plugin-1.7.1.jar

    java运行依赖jar包

    clojure-1.6.0-RC3.zip

    【标题】"clojure-1.6.0-RC3.zip" 涉及的是Clojure编程语言的一个版本,即1.6.0的候选发布版本3(Release Candidate 3)。Clojure是一种基于Lisp的函数式编程语言,它运行在Java虚拟机(JVM)上,充分利用了Java生态...

    clojure-1.5.1.jar

    clojure-1.5.1.jar

    clojure-must-watch-源码.rar

    这个压缩包"clojure-must-watch-源码.rar"似乎包含了与Clojure相关的源代码,可能是为了帮助学习者深入理解Clojure编程语言的核心概念和实践技巧。尽管没有具体的标签来指导我们关注特定的方面,但我们可以从Clojure...

    Clojure电子书合集1(12本)

    [2009] Programming Clojure.(Stuart Halloway).[1934356336].pdf [2010] Functional Programming with Clojure - Simple Concurrency on the JVM.(Tim Berglund, Matthew McCullough).[193650202X].pdf [2010] ...

    clojure-cheatsheet, 用于Emacs的Clojure Cheatsheet.zip

    clojure-cheatsheet, 用于Emacs的Clojure Cheatsheet 用于Emacs的难以置信方便的 Clojure Cheatsheet,更新为 Clojure,打包成简单,快速,可以搜索的离线形式: 状态准备使用基于 Clojure 1.7.0.安装如果你连接到 ...

    clojure-csv, 从Clojure读取和写入CSV文件的库.zip

    clojure-csv, 从Clojure读取和写入CSV文件的库 csvclojure CSV是一个用于读取和写入CSV文件的小型库。 主要功能:接受两个常见行终止符。CSV字段内的引号和转义符是正确的句柄。解析时支持在CSV字段中嵌入未转义的行...

    Clojure电子书合集2(13本)

    [2013] Functional Programming Patterns in Scala and Clojure - Write Lean Programs for the JVM.(Michael Bevilacqua-Linn).[1937785475].pdf+epub.rar [2014] Clojure Cookbook - Recipes for Functional ...

    clojure-1.10.2-alpha2.jar

    Clojure是一种LISP风格的语言,运行在JVM上。Clojure的一大特色就是其并发机制,它支持不可变的数据结构(Clojure是来自于可持久化的数据结构)。Clojure还有一个特色是软件事务存储(Software Transactional Memory...

    clojure-basics-源码.rar

    这个“clojure-basics-源码.rar”压缩包很可能是包含了一些基本Clojure编程概念的示例代码或者教程。虽然没有具体的标签提供额外的信息,但我们可以从文件名推测其内容可能涵盖了Clojure的基础知识。 Clojure的基本...

    clojure1.3.0及资料

    4. **Clojure 1.4.0 Alpha2**: "clojure-clojure-clojure-1.4.0-alpha2-12-gec59eba.zip"是Clojure 1.4.0的一个早期预览版本。这个版本可能包含了1.3.0之后的进一步改进和新功能,对于关注Clojure演进的开发者来说,...

    programming-clojure-3rd

    《Programming Clojure 第三版》是一本深入探讨Clojure编程语言的专业书籍,旨在帮助开发者全面理解和掌握这门基于Lisp的现代函数式编程语言。Clojure是由Rich Hickey设计的,它运行在Java虚拟机(JVM)上,同时也...

    clojure-sha-3:sha-3(224、256、384和512位)的clojure实现,通常,keccak b = 1600

    在您的project.clj中,将[clojure-sha-3 "0.1.0"]到:dependencies矢量中。 使用时,请在您的ns声明中使用:require [joshua-g.sha-3 :as s] ,或从REPL中(require '[joshua-g.sha-3 :as s]) 。 例子 user> ...

    nginx-clojure-0.5.1.tar.gz

    Nginx-Clojure 是一个 Nginx 的模块,用于嵌入 Clojure 或者 Java 或者 Groovy 程序。 可以通过nginx-clojure实现JAVA扩展nginx的功能,如权限验证。

    clojure-utils, 各种小型但方便的clojure实用程序函数库.zip

    clojure-utils, 各种小型但方便的clojure实用程序函数库 各种小型但方便的Clojure实用程序函数库特别关注:Clojure.java - 用于从Java调用Clojure的实用工具函数的Java类arrays.clj - 操作Java数组core.clj - 应该在...

    Clojure入门介绍: Clojure - Functional Programming for the JVM

    Clojure入门介绍: Clojure - Functional Programming for the JVM

    clojure-lsp:Clojure的语言服务器(LSP)

    氯菊酯 Clojure的。 采用类似于草书的方法静态分析代码。 •••••• 总览 该项目的目标是为所有编辑人员带来适用于Clojure的出色... clojure-lsp启动了一个NREPL服务器,可以更改正在运行的实例的代码并实时查看客

    clojure-1.6

    clojure-1.6 java jvm

Global site tag (gtag.js) - Google Analytics