抽象类与抽象泛型?

时间:2016-04-08 09:20:27

标签: java 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();

}
}

2 个答案:

答案 0 :(得分:3)

您无法执行此操作,因为SubInstance继承自AbstractInstance<SubType>。由于您的定义,SubTypeAbstractInstance,其SubType的通用或SubType的任何子类。

但是变量AbstractInstance<AbstractType> abstractInstance没有满足这个条件。

为什么呢?因为不是每个AbstractType都是SubType的子类。如果您将变量更改为AbstractInstance<SubType> abstractInstance,您的程序将再次编译

答案 1 :(得分:1)

将新部件更改为

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