You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Clojure中用Builder创建google-maps-services-java的GeoApiContext?

在Clojure中创建Google Maps服务的GeoApiContext

别担心,Java的Builder模式在Clojure里其实很好上手,我来一步步帮你把官方的Java代码转换成Clojure的def定义!

先回顾Java示例代码

官方文档里的Java创建方式大概是这样的:

GeoApiContext context = new GeoApiContext.Builder()
    .apiKey("YOUR_API_KEY")
    .build();

Clojure版本的转换实现

在Clojure里,我们可以利用->宏来模拟Java的链式调用,同时正确处理内部类Builder:

(import '[com.google.maps GeoApiContext]
        '[java.util.concurrent TimeUnit])

(def my-geo-api-context
  (-> (GeoApiContext$Builder.)  ;; 初始化Builder内部类
      (.apiKey "你的Google Maps API密钥")  ;; 设置API密钥
      ;; 可选:添加其他配置,比如超时设置
      (.connectTimeout 10 TimeUnit/SECONDS)
      (.readTimeout 10 TimeUnit/SECONDS)
      (.build)))  ;; 最终构建GeoApiContext实例

关键细节解释

  1. 内部类的引用方式:Java里的GeoApiContext.Builder是内部类,在Clojure里需要用$来分隔外层类和内部类,也就是GeoApiContext$Builder。调用构造器时直接写(GeoApiContext$Builder.)就等同于Java的new GeoApiContext.Builder()。

  2. 链式调用的处理:Clojure的->宏会把前一个表达式的结果作为后一个表达式的第一个参数,完美对应Java里的链式方法调用(比如.apiKey().build()),代码逻辑和Java完全一致,但写法更符合Clojure的风格。

  3. 关于clojure/reflect的问题:之前你用clojure/reflect没找到信息,大概率是因为没指定完整的内部类名。试试这个:

    (clojure.reflect/reflect GeoApiContext$Builder)
    

    这样就能看到Builder类的所有方法和属性了。

  4. 添加更多配置:如果需要设置代理、重试策略等其他Builder支持的选项,只需要在->链里添加对应的方法调用即可,比如:

    (.proxy (ProxyConfig.builder().build()))
    

注意事项

确保你的项目已经正确引入了google-maps-services-java依赖,比如在Leiningen的project.clj里添加:

:dependencies [[com.google.maps/google-maps-services "2.2.0"]]  ;; 替换成最新版本

内容的提问来源于stack exchange,提问作者Rux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:58:23