在尝试定义一个名为“clear”的方法的协议时似乎存在问题
(defprotocol PClear
(clear (link: o)))
=> PClear
(defrecord Foo (link: )
PClear
(clear (link: o) o))
=> CompilerException java.lang.ClassFormatError: Duplicate method name&signature in class file xxxx/Foo, compiling:(NO_SOURCE_PATH:1:1)
我认为这是由于与底层实现中Java方法Collection.clear()的名称冲突。然而,这个错误对此点不太清晰,并且我认为潜在的风险尚未在文档中描述。
似乎有两种方法可以解决这个问题
a) 禁止使用"clear"作为协议方法名称(在这种情况下,错误应该提供更多信息,规则应予以记录)
b) 在类文件格式中找到支持此功能的方法(可能通过在JVM返回类型上重载,因为Collection.clear()返回void??)