1

什么是 Java 中链式方法调用的 Clojure 等价物?

TokenOptions tokenOpts = new TokenOptions.Builder()
      .role(Role.MODERATOR)
      .expireTime((System.currentTimeMillis() / 1000) + (7 * 24 * 60 * 60)) // in one week
      .data(connectionMetadata)
      .build());

此代码是从https://tokbox.com/opentok/tutorials/create-token/java/复制的

4

1 回答 1

4

第一步:将左括号一个令牌移动到左侧,添加一个doto链接方法应用程序:

(def tokenOpts (doto (TokenOptions/Builder)
                     (.role Role.MODERATOR)
                     (.expireTime (System.currentTimeMillis() / 1000) + (7 * 24 * 60 * 60)) // in one week
                     (.data connectionMetadata)
                     (.build));

然后在每个方法的参数上“重复”:

(def tokenOpts (doto (TokenOptions/Builder)
                     (.role Role/MODERATOR)
                     (.expireTime (+ (System.currentTimeMillis() / 1000) 
                                  (7 * 24 * 60 * 60)) // in one week
                     (.data connectionMetadata)
                     (.build));

然后“递归”到这些函数的参数(请注意,我在这里切换到函数这个词,因为此时我们已经脱离了 Java 思维模式:

(def tokenOpts (doto (TokenOptions/Builder)
                     (.role Role/MODERATOR)
                     (.expireTime (+ (/ (System/currentTimeMillis) 1000) 
                                     (* 7 24 60 60))) ;; in one week
                     (.data connectionMetadata)
                     (.build))

您需要在命名空间声明(文件顶部的块)中添加 (:import .....) 以确保您在这些名称下具有可用的 Roll 和 TokenOptions 类。

于 2015-05-06T22:02:57.550 回答