Clojure 2024 状态调查! 中分享您的想法。

欢迎!请参阅 关于页面 获取更多关于如何使用本站的信息。

0 投票
Java 互操作性

JDK 9 中引入了一个新的内嵌类 Runtime.Version。
然而,我必须使用完全限定的名称才能使用它

(Runtime$Version/parse (System/getProperty "java.version"))
Syntax error compiling at ...
No such namespace: Runtime$Version

;; fully qualified name works
(java.lang.Runtime$Version/parse (System/getProperty "java.version"))
#object[java.lang.Runtime$Version 0x39a4ea03 "11.0.2"]

这是预期的吗?
我尝试了另一个(私有的)内嵌类,也存在相同的行为

String$CaseInsensitiveComparator
Syntax error compiling ...
Unable to resolve symbol: String$CaseInsensitiveComparator in this context

Java 互操作性参考Java Interop reference说内嵌类可以按Classname$NestedClassName访问,但没有具体提到这个问题。
这对我来说有点不一致。

诚然,我仍然可以导入内嵌类并使用它 - 但这是我未曾预料到要做的。

(import 'java.lang.Runtime$Version)
(Runtime$Version/parse (System/getProperty "java.version"))
#object[java.lang.Runtime$Version 0x781187fa "11.0.2"]

1 答案

+1 投票

选中
 
最佳答案

您可以在以下位置看到默认导入列表:https://github.com/clojure/clojure/blob/clojure-1.11.1/src/jvm/clojure/lang/RT.java#L39

我只看到两个内嵌类: Thread$UncaughtExceptionHandlerThread$State

它是静态的,所以我猜它应该只包括在任何支持的 Java 版本中都可用的类。

...