Java 具有抽象泛型的抽象类?
我在使用带有抽象泛型的抽象类时遇到了一个问题 我可以实例化子类,但不能将其称为抽象超类型 例如:Java 具有抽象泛型的抽象类?,java,generics,Java,Generics,我在使用带有抽象泛型的抽象类时遇到了一个问题 我可以实例化子类,但不能将其称为抽象超类型 例如: AbstractInstance<AbstractType> instance = new SubInstance() 给我“无法从子实例转换为抽象实例” 我做错了什么? 下面是适当的例子 public class Demo { /** * Abstract Instance * * @param <Type> */ public abstract class Ab
AbstractInstance<AbstractType> instance = new SubInstance()
给我“无法从子实例转换为抽象实例”
我做错了什么?
下面是适当的例子
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();
}
}
公共类演示
{
/**
*抽象实例
*
*@param
*/
公共抽象类AbstractInstance
{
}
/**
*抽象泛型类型
*
*/
公共抽象类AbstractType
{
}
/**
*扩展AbstractInstance的子实例
*
*/
公共类子实例扩展了AbstractInstance
{
}
/**
*扩展AbstractType的子类型
*
*/
公共类子类型扩展了AbstractType
{
}
公共静态void main(字符串[]args)
{
//类型不匹配:无法从Demo.SubInstance转换为Demo.AbstractInstance
AbstractInstance AbstractInstance=新的子实例();
}
}
您不能这样做,因为子实例
继承自抽象实例
。因此,您定义了子类型
是一个抽象实例
,具有子类型
的泛型或子类型
的任何子类
但是变量AbstractInstance AbstractInstance
不能满足这个条件
为什么??因为不是每个
抽象类型
都是子类型
的子类。如果将变量更改为AbstractInstance AbstractInstance
,则程序将再次编译您无法执行此操作,因为子实例
继承自AbstractInstance
。因此,您定义了子类型
是一个抽象实例
,具有子类型
的泛型或子类型
的任何子类
但是变量AbstractInstance AbstractInstance
不能满足这个条件
为什么??因为不是每个抽象类型
都是子类型
的子类。如果将变量更改为AbstractInstance AbstractInstance
,程序将再次编译将新部件更改为
AbstractInstance<? extends AbstractType> abstractInstance = new SubInstance();
AbstractInstance将新零件更改为
AbstractInstance<? extends AbstractType> abstractInstance = new SubInstance();
AbstractInstance子实例
定义为继承自AbstractInstance
,因此不能将其分配给AbstractInstance
,因为子实例
被定义为抽象实例
,而泛型子实例
子实例
被定义为继承自抽象实例
,所以您不能将其分配给抽象实例
,因为子实例
被定义为具有泛型子实例的抽象实例
,所以上面是一个小例子,但我实际上想要一个列表:ListWell上面是一个小例子,但我实际上想要一个列表:list