[更新]真實情況比我看起來最初的問題稍微複雜一些。 [/ UPDATE]當類型爲通配符時如何將泛型結果用作泛型參數?
我有點被以下行爲難住了。鑑於這樣的代碼:
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(capture#478 of ?) in Inter<capture#478 of ?> cannot be applied to (java.lang.Object)
而Eclipse的給我:
The method useT(capture#1-of ?) in the type Inter<capture#1-of ?> is not applicable for the arguments (capture#2-of ?)
顯然,不管是什麼T
是makeT()
結果類型是與參數類型useT()
相同。爲什麼我不能這樣做?有沒有解決方法?
實際情況並非如此瑣碎這給你
bar
相同的簽名,如上所述。首先,'bar'實際上是一種接口方法,所以我不能只在其上粘貼類型量詞。但我認爲你總是可以重構代碼,通過將T的「範圍」推入私有方法爲量詞騰出空間。 – 2010-01-28 22:33:37