[업데이트] 실제 상황은 내 초기 질문보다 약간 복잡해 보였습니다. 이를 반영하기 위해 코드를 약간 변경했습니다. [/ UPDATE]유형이 와일드 카드 일 때 일반 매개 변수로 일반 결과를 사용하는 방법은 무엇입니까?
다음과 같은 문제가 발생했습니다. 을 감안할 때 코드 같은 :
이클립스 반면useT(capture#478 of ?) in Inter<capture#478 of ?> cannot be applied to (java.lang.Object)
나에게주지 않는다 :
The method useT(capture#1-of ?) in the type Inter<capture#1-of ?> is not applicable for the arguments (capture#2-of ?)
은 물론, 상관없이 makeT()
의 결과 유형이이다 무엇 T
interface Inter<T> {
T makeT();
void useT(T t);
}
public class Foo {
public void bar(Qux q) {
Inter<?> x = getInterForQux(q);
x.useT(x.makeT());
}
Inter<?> getInterForQux(Qux q) {
if(someTest(q)) {
return (Inter<Integer>) mkAnInterInt();
} else {
return (Inter<Double>) mkAnInterDouble();
}
}
}
javac의 나에게 오류를 제공 매개 변수 유형은 useT()
과 동일합니다. 내가 왜 이럴 수 없어? 해결 방법이 있습니까?
을 원하는이 당신에게
bar
에 대해 동일한 서명을 제공을, 위에서 언급 한 바와 같이. 한 가지 사실,'bar'는 실제로 인터페이스 메소드이므로, 타입 한정어를 사용할 수 없습니다. 그러나 나는 T의 "범위"를 개인적인 방법으로 밀어 냄으로써 수량 기호를위한 공간을 만들기위한 코드를 항상 리펙토링 할 수 있다고 생각합니다. –