将抽象类与抽象泛型一起使用时遇到问题。

我可以实例化该子类,但是不能将其称为抽象超类型。

例如:

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();

}
}

最佳答案

将新零件更改为

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

07-25 22:12