두 번째 유형 (T, M) 첫 번째 컴파일러는 두 번째 유형을 인식하지 않습니다. 어떤 생각을 잘못하고 있니?타입을 java 제네릭을 사용하여 유추 할 수 없습니다.
Error:(164, 17) java: name clash: consumeBatch(java.lang.String,int,io.vertx.core.Handler<java.util.List<MessageResponse>>) in EventQueueSQS and consumeBatch(java.lang.String,int,io.vertx.core.Handler<java.util.List<MessageResponse<M>>>) in EventQueue have the same erasure, yet neither overrides the other
컴파일러 힘이 나를 : 나는 합병증 오류가
public class EventQueueSQS
implements EventQueue<SendMessageResultImpl, MessageImpl> {
@Override
public SendMessageResponse send(String address, String message, String eventId) {..}
@Override
public void consumeBatch(String address, int numOfConsumerThreads, Handler<MessageResponse> callback) {
}
..
}
consumeBatch 재정의 방법 : IMPL에
public interface EventQueue<T, M> {
SendMessageResponse<T> send(String address, String message, String eventId);
void consumeBatch(String address, int numOfConsumersPerQueue, Handler<MessageResponse<M>> callback);
..
}
:
public class SendMessageResponse<T> {
private T result;
}
public class MessageResponse<M> {
private M message;
}
인터페이스는 이런 식으로 정의된다 방법에 impl을 작성하십시오 :
public void consumeBatch(String address, int numOfConsumersPerQueue, Handler<MessageResponse<Message>> callback) {
왜? 나는 그것을 클래스 수준에서 선언했다
어떤 생각?
아마도 제네릭이있는 클래스를 보유하고있는 Handler를 사용하는 것이 문제일까요? 경계 경우 자신의 바운드 구현 유형으로 변환하는 등 M
바이트 코드를 입력 매개 변수로 컴파일 또는 객체 경우 언제 제네릭 첫 번째 작품으로, 다른 하나 나던
당신이 https://stackoverflow.com/questions/14002965/java-name-clash-have-the-same-erasure-neither-hides-the-other 봤어? –
이 질문이 내 질문과 어떻게 관련이 있는지 모르겠습니까? iam이 제네릭과 인터페이스를 구현하기 때문입니다. 그리고 컴파일러는 두 번째 방법과 같이하지 않습니다 – rayman