首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用构建器模式的Clojure中创建类似Java的对象?

如何在使用构建器模式的Clojure中创建类似Java的对象?
EN

Stack Overflow用户
提问于 2012-01-11 23:21:05
回答 4查看 2.1K关注 0票数 13

如何使用Clojure创建以下对象?该对象取自java代码(来自Effective Java):

NutritionFacts cocaCola = new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

EN

回答 4

Stack Overflow用户

发布于 2012-01-11 23:32:10

使用..宏。它是两个连续的点。它只允许您需要的东西--对上一个Java方法的结果连续调用next Java方法。

我没有REPL,但是你的代码行应该翻译成这样:

代码语言:javascript
复制
(.. (NutritionFacts.Builder. 240 8) 
    (calories 100)
    (sodium 350)  
    (carbohydrates 27) 
    (build))
票数 8
EN

Stack Overflow用户

发布于 2012-01-11 23:30:07

我只是从Clojure开始,但对我来说它看起来像是标准方法调用:

代码语言:javascript
复制
(doto
  (NutritionFacts.Builder. 240 8)
  (.carbohydrates 27)
  (.sodium 35)
  (.calories 100)
  (.build)
)

编辑:

正如@Goran Jovic所指出的,这将调用在第一种形式中创建的对象上的所有方法。

所以它在这种情况下是有效的,因为Java代码使用了方法链接,但并不是更普遍适用。

票数 3
EN

Stack Overflow用户

发布于 2012-01-11 23:31:04

(.. (NutrionalFacts.Builder. 240 8) (calories 100) (sodium 35) (carbohydrates 27) (build))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8821751

复制
相关文章

相似问题

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