[英]Abstract Class with Abstract Generics?
將抽象類與抽象泛型一起使用時遇到問題。
我可以實例化該子類,但是不能將其稱為抽象超類型。
例如:
AbstractInstance<AbstractType> instance = new SubInstance()
哪里
SubInstance extends AbstractInstance(SubType)
給我“無法從SubInstance轉換為AbstractInstance”。
我究竟做錯了什么? 正確的示例如下。
public class Demo
{
/**
* Abstract Instance
*
* @param <Type>
*/
public abstract class AbstractInstance<Type extends AbstractType>
{
}
/**
* Abstract Generic Type
*
*/
public abstract class AbstractType
{
}
/**
* Sub Instance that extends AbstractInstance
*
*/
public class SubInstance extends AbstractInstance<SubType>
{
}
/**
* SubType that extends AbstractType
*
*/
public class SubType extends AbstractType
{
}
public static void main(String[] args)
{
//Type mismatch: cannot convert from Demo.SubInstance to Demo.AbstractInstance<Demo.AbstractType>
AbstractInstance<AbstractType> abstractInstance = new SubInstance();
}
}
您不能執行此操作,因為SubInstance
從AbstractInstance<SubType>
繼承。 由於這一點,你定義, SubType
是AbstractInstance
與通用的SubType
或的任何子類SubType
。
但是變量AbstractInstance<AbstractType> abstractInstance
滿足此條件。
為什么? 因為不是每個AbstractType
都是SubType
的子類。 如果將變量更改為AbstractInstance<SubType> abstractInstance
您的程序將再次編譯
將新零件更改為
AbstractInstance<? extends AbstractType> abstractInstance = new SubInstance();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.