我知道这是一个愚蠢的例子,但我很想知道代理方法发生了什么。
我已经设置了两个代理调用:
1。 (def cp (proxy [java.util.AbstractMap clojure.asm.ClassVisitor] []))
2。 (def cp (proxy [clojure.asm.ClassVisitor java.util.AbstractMap] []))
第一个电话很好....它返回cp。第二个电话给了我一个例外。
clojure.lang.Compiler $ CompilerException:java.lang.IncompatibleClassChangeError:实现类,编译:(/ private / var / folders / dd / qfdy6sbn3mlgk20vcxc3j0ljnpxsqr / T / form-init4780219965491827451.clj:2:5)
java.lang.IncompatibleClassChangeError:实现类
java.lang.ClassLoader.defineClass1 ClassLoader.java
java.lang.ClassLoader.defineClass ClassLoader.java:800
java.lang.ClassLoader.defineClass ClassLoader.java:643
clojure.lang.DynamicClassLoader.defineClass DynamicClassLoader.java:46
clojure.core / get-proxy-class core_proxy.clj:262
下面发生了什么?
答案 0 :(得分:0)
两者都不适用于Clojure 1.6.0。在1.5中,clojure.asm.ClassVisitor
是一个接口而不是一个抽象类。 Proxy最多需要一个类,后跟可选接口。由于java.util.AbstractMap
是一个抽象类,因此它不能出现在类和接口列表的第二位。