下面的代碼在行(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