_评注由: 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
#object[java.lang.Package 0x6f3c660a "package user"]
➜ clojure git:(f5cfd24d) ✗
我认为这应该被回滚,并且让用户空间根据二进制名称计算包。