使用带抽象泛型的抽象类时遇到问题。
我可以实例化子类,但我不能将它称为抽象超类型。
例如:
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();
}
}
答案 0 :(得分:3)
您无法执行此操作,因为SubInstance
继承自AbstractInstance<SubType>
。由于您的定义,SubType
是AbstractInstance
,其SubType
的通用或SubType
的任何子类。
但是变量AbstractInstance<AbstractType> abstractInstance
没有满足这个条件。
为什么呢?因为不是每个AbstractType
都是SubType
的子类。如果您将变量更改为AbstractInstance<SubType> abstractInstance
,您的程序将再次编译
答案 1 :(得分:1)
将新部件更改为
AbstractInstance<? extends AbstractType> abstractInstance = new SubInstance();