_评论由:gshayban发表_
这是一个漏网的糟糕补丁。上述动机链出了尝试将包符号化的nREPL摘录,基本上
(symbol (.getName (.getPackage TheClass))). 原代码可以通过与JVM抓取它的相同方式从二进制名称中导出包名。(取最后一个点之前的前缀)
修复还引入了已弃用的调用,并在类加载期间增加了更多的工作(这是关键路径)。
顺便说一下,JDK9+会在类定义时自动定义一个包,从二进制名称派生而来
## JDK 8
➜ clojure git:(f5cfd24d) ✗ docker run --rm -v $HOME/.m2:/m2 openjdk:8-slim java -jar /m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar -e '(deftype T [])' -e '(or (.getPackage T) :nada)'
user.T
:nada
## JDK 9
➜ clojure git:(f5cfd24d) ✗ docker run --rm -v $HOME/.m2:/m2 openjdk:9-slim java -jar /m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar -e '(deftype T [])' -e '(or (.getPackage T) :nada)'
user.T
#object[java.lang.Package 0x10993713 "package user"]
## JDK 11
➜ clojure git:(f5cfd24d) ✗ docker run --rm -v $HOME/.m2:/m2 openjdk:11-slim java -jar /m2/repository/org/clojure/clojure/1.8.0/clojure-1.8.0.jar -e '(deftype T [])' -e '(or (.getPackage T) :nada)'
user.T
java.lang.Package 对象 0x6f3c660a "用户包"]
➜ clojure git:(f5cfd24d) ✗
我认为这应该被撤销,并让用户空间从二进制名称中计算包。