Java 模板铸造

Java 模板铸造,java,class-hierarchy,Java,Class Hierarchy,给定以下类层次结构 public class BaseClass { } public class ExtendedClass extends BaseClass{ } 有什么原因不能使用基类将泛型类的实例强制转换为使用扩展类的同一类吗? e、 g List extendedList=(List)new LinkedList(); 是否有任何方法可以获得类似的行为,而不迫使我将第一个列表中的所有元素添加到第二个列表中。这是禁止的,因为否则您将能够执行此操作 List<Base&g

给定以下类层次结构

public class BaseClass {

}

public class ExtendedClass extends BaseClass{

}
有什么原因不能使用
基类将泛型类的实例强制转换为使用扩展类的同一类吗?
e、 g

List extendedList=(List)new LinkedList();

是否有任何方法可以获得类似的行为,而不迫使我将第一个列表中的所有元素添加到第二个列表中。

这是禁止的,因为否则您将能够执行此操作

List<Base> base = new ArrayList<>();
List<Extended> extended = (List<Extended>)base;

base.add(new OtherExtended()); // now you have OtherExtended in List<Extended>.

也有同样的问题<代码>扩展的
再次包含错误的对象。

它是禁止的,否则您将能够执行此操作

List<Base> base = new ArrayList<>();
List<Extended> extended = (List<Extended>)base;

base.add(new OtherExtended()); // now you have OtherExtended in List<Extended>.

也有同样的问题
extended
再次包含错误的对象。

基类的每个扩展都不能转换为ExtendedClass。@Zefick键入错误。这正是问题所在,基类的每个扩展都不能转换为ExtendedClass。@Zefick键入错误。这正是你可以做的
List extended=(List)(List)base,但它将产生一个未经检查的强制转换警告,当从
extended
检索实例时,您将得到一个ClassCastException。好的!我知道列表可能包含其他类型的元素,这是不允许的。那么一个实现接口的类呢?假设
类基类实现了接口
,我想将
列表
元素转换成
列表
注意,您可以执行
列表扩展=(列表)(列表)基类,但它将产生一个未经检查的强制转换警告,当从
extended
检索实例时,您将得到一个ClassCastException。好的!我知道列表可能包含其他类型的元素,这是不允许的。那么一个实现接口的类呢?假设
类基类实现了接口
,我想将
列表
元素转换成
列表
List<Extended> extended = new ArrayList<>();
List<Base> base = (List<Base>)base;
base.add(new OtherExtended());