传递两个抽象类时代理的奇怪行为

时间:2014-04-01 07:56:51

标签: clojure

我知道这是一个愚蠢的例子,但我很想知道代理方法发生了什么。

我已经设置了两个代理调用:

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

下面发生了什么?

1 个答案:

答案 0 :(得分:0)

两者都不适用于Clojure 1.6.0。在1.5中,clojure.asm.ClassVisitor是一个接口而不是一个抽象类。 Proxy最多需要一个类,后跟可选接口。由于java.util.AbstractMap是一个抽象类,因此它不能出现在类和接口列表的第二位。