我收到编译错误"不可转换的类型"对于(B)行的以下代码。从概念上讲,我认为它应该有效。首先,"适配器"是BasicAdapter类型,BetaAdapter是它的子类。其次,类型参数BetaData是AlphaData的子类。
public class Test
{
class AlphaData {} // base class for data
class BetaData extends AlphaData {} // subclass for data
class BasicAdapter<T> {} // a generic adapter
class BetaAdapter extends BasicAdapter<BetaData> {} // adapter subclass with binding
BasicAdapter<AlphaData> adapter = null; //(A)
Test()
{
BetaAdapter ba = (BetaAdapter) adapter; //(B)
}
}
如果我将标记为(A)的行更改为
BasicAdapter<BetaData> adapter = null;
它编译。那讲得通。但我想找出一种方法来使原始安排有效。
答案 0 :(得分:3)
BasicAdapter<? extends AlphaData> adapter = null;
可以工作(或至少编译)。它与
兼容BasicAdapter<? extends AlphaData> adapter = new BetaAdapter();
答案 1 :(得分:0)
您正在指定
class BetaAdapter extends BasicAdapter<BetaData> {}
这意味着,如果您尝试将BasicAdapter<BetaData>
强制转换为BasicAdapter<AlphaData>
,则BasicAdapter必须是BasicAdapter<BetaData>
类型,然后它才会起作用,因为Type参数必须兼容。
以下代码编译并且有意义,因为我们接受BetaAdapter类中的所有AlphaData类作为类型参数。
public class Test
{
class AlphaData {} // base class for data
class BetaData extends AlphaData {} // subclass for data
class BasicAdapter<T> {} // a generic adapter
//changes made in following line...
class BetaAdapter extends BasicAdapter<AlphaData> {} // adapter subclass with binding
BasicAdapter<AlphaData> adapter = null; //(A)
Test()
{
BetaAdapter ba = (BetaAdapter) adapter; //(B)
}
}