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