2024年Clojure调查问卷中分享您的想法!

欢迎!请访问关于页面以获取更多有关如何使用本网站的信息。

0
Java Interop

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 Interop参考表示嵌套类可以以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

我只看到了2个嵌套类: Thread$UncaughtExceptionHandlerThread$State

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

...