clojure 中继承一个Java抽象类,函数产生重复?

51 views
Skip to first unread message

Albert Lee

unread,
Mar 5, 2012, 9:51:02 AM3/5/12
to CN-Clojure
问题背景: extends org.gearman.worker.AbstractGearmanFunction , 并继承其中的
executeFunction 函数,生成 jar, 在java中调用此jar,结果发生异常:

Exception in thread "main" java.lang.ClassFormatError: Duplicate
method name&signature in class file GearRouter/Router
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
142)


在eclipse中看生成的jar,里面确实有两个一样签名的 executeFunction() 函数. 所以,如何在clojure中正确的
override 一个函数呢?

源代码:
(ns GearRouter.core
(:import (org.gearman.client GearmanJobResult GearmanJobResultImpl)
(org.gearman.util ByteUtils)
(org.gearman.worker AbstractGearmanFunction)
)

(:gen-class
:name GearRouter.Router
:extends org.gearman.worker.AbstractGearmanFunction
:exposes-methods {executeFunction upExecuteFun}
:methods [[executeFunction [] org.gearman.client.GearmanJobResult]]
))

(defn -executeFunction [this]
(GearmanJobResultImpl. (. this jobHandle)
true
(.getBytes (String. "From Clojure"))
(byte-array 1 0)
(byte-array 1 0)
0 0))

naitong Xiao

unread,
Mar 5, 2012, 10:51:08 AM3/5/12
to cn-cl...@googlegroups.com
去掉 :methods 声明就可以了
gen-class doc 上面有说明, 不要重复声明父类或接口的中签名相同的方法
Reply all
Reply to author
Forward
0 new messages