下面的代码在行(B)处出现编译错误“inconvertible types”。从概念上讲,我认为它应该起作用。首先,“adapter”是BasicAdapter类型的,而BetaAdapter是它的一个子类。其次,类型参数BetaData是AlphaData的一个子类。Java:铸造一个具有类型参数的类
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;
它编译。这就说得通了。但我想找出一种方法来使原来的安排工作。
你可能想看看[这个问题](http://stackoverflow.com/questions/18666710/why-are-arrays-covariant-but-generics-are-invariant)。此外,[这个问题]的最佳答案(http://stackoverflow.com/questions/2660827/java-generics-covariance)看起来相关。 – ajb
或这一个:http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p?lq=1 – Thilo