簡體   English   中英

抽象類與抽象泛型?

[英]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();

}
}

您不能執行此操作,因為SubInstanceAbstractInstance<SubType>繼承。 由於這一點,你定義, SubTypeAbstractInstance與通用的SubType或的任何子類SubType

但是變量AbstractInstance<AbstractType> abstractInstance滿足此條件。

為什么? 因為不是每個AbstractType都是SubType的子類。 如果將變量更改為AbstractInstance<SubType> abstractInstance您的程序將再次編譯

將新零件更改為

AbstractInstance<? extends AbstractType> abstractInstance = new SubInstance();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM