在尝试定义包含 "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??)