gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:54:15 24 4
gpt4 key购买 nike

使用 Clojure,如何创建以下对象?该对象取自 java 代码(From Effective Java):
NutritionFacts cocaCola =new NutritionFacts.Builder(240,8).calories(100).sodium(35).carbohydrate(27).build();

最佳答案

虽然很难与其他答案中的简洁争辩1,..已经有些失宠,取而代之的是更通用的 -> .我个人更喜欢:

(-> (NutritionFacts$Builder. 240 8) 
(.calories 100)
(.sodium 350)
(.carbohydrates 27)
(.build))

它还有几个字符,但你获得了两件事:
  • 明确性。我可以查看钠线(例如)并告诉它是一个 Java 方法调用,因为 .就在那里。
  • 灵活性。如果需要,我可以在中间链接一些非方法调用(比如将其打印到标准输出),或者在所有这些调用结束时将其输入到其他一些函数调用中。

  • 最重要的是,这个问题的每个其他答案都弄错了类名:Java 的 NutritionFacts.Builder 是名为 NutritionFacts$Builder 的真实 JVM 类的语言糖,而该类是 Clojure 必须引用的类(因为我们没有使用 javac编译我们的代码)。

    1 我不同意 doto建议:它之所以有效,只是因为这个 Builder 类碰巧通过改变单个实例然后返回它来实现其方法链。 doto对于需要就地变异的 Java 对象来说非常有用,但是当一个类足够好地假装它是不可变的时,你真的应该使用方法链版本(即, -> )。

    关于clojure - 如何在使用构建器模式的 Clojure 中创建类 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821751/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com