我在(B)行得到編譯錯誤「AlphaData無法通過方法調用轉換轉換爲CAP#1」。我的解決方法是將line(A)處的indexOf()的簽名更改爲Object類型而不是T.但是,然後我失去了類型檢查。此外,如果「數據」也被聲明爲BetaData類型,我想讓B行工作。有沒有辦法做我想要的?Java:使用具有通配符類型參數的類函數
public class Test
{
class AlphaData {} // base class for data
class BetaData extends AlphaData {} // subclass for data
abstract class BasicAdapter<T> // a generic adapter
{
abstract int indexOf (T item); //(A)
}
class BetaAdapter extends BasicAdapter<BetaData> // adapter subclass with binding
{
int indexOf (BetaData item) { return 0; }
}
BasicAdapter<? extends AlphaData> adapter = null;
Test()
{
AlphaData data = null;
int index = adapter.indexOf (data); //(B) -- compile error here
}
}
你如何實例化適配器? –
寫入的示例只允許一個實例:new BetaAdapter()。但是它需要爲BasicAdapter的其他子類以及BetaAdatper的子類工作。 –