假設我有像這樣Java泛型類型中隱藏的參數
public interface Foo<Ret, Arg> {
public Ret doSomething(Arg arg);
}
而具體的實現類,只有具有包可見的接口。
class FooImpl<Ret, Arg1, Arg2> implements Foo<Ret, Arg>, Bar<Ret, Arg1, Arg2> {
// This class also implements something else making use of Arg2, so you cannot safely remove it
// But nothing relating to Arg2 is needed to create a FooImpl
}
(這如何可能發生的一個例子是Foo
由兩個接口聲明爲一個可變參數方法FooImpl
轉發方法的實現和Bar
)
現在,假設有一個靜態方法在某處作爲Foo
返回FooImpl
的相同包。人們會認爲你可以使用return new FooImpl<Ret, Arg1, ?>(...)
,但實際上你不能(你必須使用具體的虛擬類型,如Arg2
,即...... return new FooImpl<Ret, Arg1, Object>(...)
)。
任何想法,爲什麼這是,尤其是因爲Foo
接口和軟件包的可見性有效地隱藏FooImpl
從任何使用靜態方法?是否是因爲人們仍然可以在某種程度上使用反射來達到需要具體類型的FooImpl
的Bar
部分?
你得到的錯誤信息是什麼?你是爲了構造函數還是在試圖將其轉換回來時獲得它?那個靜態方法的返回簽名是什麼? – Thilo