请在2024 Clojure状态调查!中分享您的看法。

欢迎!请查看关于页面以获取更多关于这是如何运作的信息。

0
Java互操作

由于Clojure 1.10 alpha-6不再支持Java <=7,现在似乎有理由将Java <=8中引入的{{java.lang}}包中的新类添加到Clojure的{{DEFAULT_IMPORTS}}中。

以下是我知道的那些类的列表

在Java 7中引入
- AutoCloseable
- ClassValue
- ReflectiveOperationException
- BootstrapMethodError
- SafeVarargs

在Java 8中引入
- FunctionalInterface

已由:Alex Miller预审

5 个答案

0

评论由:gshayban

除了AutoCloseable以外,其余那些类的使用频率都很低。我想明确地导入它们,而不是污染ns导入。毕竟,带有@FunctionalInterface注解的接口、注解类型很常见;明确使用它也是可以的。

额外类加载(java.base模块已经加载的类除外)会导致轻微的启动时间成本。我已经试验过去掉一些很少使用的默认导入(无疑是一个破坏性变更)。

0

评论由:alexmiller

我认为我们应该坚持过去一直以来的做法——java.lang中的内容会被自动导入。我不认为导入6个类会影响启动时间。

0

评论由:sohta 发布

添加了补丁,以防万一 :)

0

评论由:glts 发布

Java.lang中的一些嵌套类还没有自动导入。其中一些已经导入了

`
Thread$UncaughtExceptionHandler
;=>java.lang.Thread$UncaughtExceptionHandler

Character$Subset
;在(REPL:0:0)处编译时出现语法错误。
;在该上下文中无法解析符号:Character$Subset
`

缺少的导入如下

  • {{Character$Subset}}
  • `}

  • {{ProcessBuilder$Redirect}}
  • `

  • {{ProcessBuilder$Redirect$Type}}

也许在这里也添加这些会更好。至少我觉得不使用裸露的
`}.

0
参考: https://clojure.atlassian.net/browse/CLJ-2383(由sohta报告)
...