我在(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的子类工作。 –