1
reify
으로 JGroups에서 다음 Java 인터페이스를 '구현'하려고합니다.오버로드 된 메소드로 Java 인터페이스를 구체화하는 방법은 무엇입니까?
public interface MessageListener extends StateListener {
/**
* Called when a message is received.
* @param msg
*/
void receive(Message msg);
/** Called when a batch of messages is received */
default void receive(MessageBatch batch) {
for(Message msg: batch) {
try {receive(msg);}
catch(Throwable t) {}
}
}
}
이 경우 수신 방법은 각 매개 변수 하나 (물론 다른 유형)로 두 번 나타납니다. 내가 CIDER에 다음 코드를 reify
하려고하면
(reify org.jgroups.MessageListener (receive[#^org.jgroups.Message msg]
(println msg)))
내가 오류 메시지가 얻을 : receive
로
CompilerException java.lang.IllegalArgumentException: Can't define method not in interfaces: receive, compiling:(*cider-repl clj-groups*:49:21)
인터페이스에서 확실히 볼 수 있습니다를, 나는이 문제가 관련되어 있다고 가정 오버로드 된 메서드 및 내 typ 힌트가 작동하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 :리스의 의견에 따라 코드를 변경 한 후 :
(reify org.jgroups.MessageListener (receive[this #^org.jgroups.Message msg]
(println msg)))
오류 메시지가 변경 :
CompilerException java.lang.IllegalArgumentException: Mismatched return type: receive, expected: void, had: java.lang.Object, compiling:(*cider-repl clj-groups*:80:21)
적어도 'this' 매개 변수를 추가해야합니다 :'(receive [ 이 msg] ...)'. – Lee
http://stackoverflow.com/questions/21000267/clojure-reify-a-java-interface-with-overloaded-methods – mishadoff
가능한 중복 된 [Clojure 오버로드 된 메소드로 Java 인터페이스 재정의] (http://stackoverflow.com)/questions/21000267/clojure-reify-a-java-interface-with-overloaded-methods) – mishadoff