Ral*_*och 4 methods types clojure
我已经创建了一个application-info接口和一个类但是当我查看生成的类时,所有方法的返回类型都是Object,我可以将返回类型更改为String吗?文档说使用defrecord可以进行类型提示但不提供示例,我能找到的唯一示例是类型提示字段和方法参数.
SRC/COM/vnetpublishing.clj
(ns com.vnetpublishing)
(defprotocol ApplicationInfo
(author [obj])
(author-email [obj])
(copyright [obj])
(app-name [obj])
(version [obj])
)
Run Code Online (Sandbox Code Playgroud)
SRC/Physics.clj
(ns Physics)
(defrecord info [] com.vnetpublishing.ApplicationInfo
(author [this] "Ralph Ritoch")
(author-email [this] "Ralph Ritoch <root@localhost>")
(copyright [this] "Copyright \u00A9 2014 Ralph Ritoch. All rights reserved.")
(app-name [this] "Physics")
(version [this] "0.0.1-alpha")
)
Run Code Online (Sandbox Code Playgroud)
看看definterface宏.与defprotocol不同,definterface宏提供了一种为方法编写返回类型提示的方法.
Alan Malloy 在这里解释得非常好:
"协议是由Clojure函数使用的,它们不应该是静态类型的;接口是供Java类消费的,需要静态类型化."
然后你可以使用它:
(definterface Test
(^void returnsVoid [])
(^int returnsInt [])
(^long returnsLong [])
(^String returnsString [])
(^java.util.HashMap returnsJavaUtilHashMap []))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
564 次 |
| 最近记录: |