根据Java文档,泛型仅限于编译时.一旦代码编译,它们就会消失,这称为Type Erasure.
现在,关于方法,方法1只是向列表添加强制转换而不检查其中存在的所有元素的类型.这意味着,如果List被转换为Cat类型,那么在运行时代码中的任何地方都可能会出现意外的ClasscastException,而它的结果是Dog.
方法2创建一个全新的列表,它遍历所有元素并尝试将每个元素转换为目标类型.意思是,如果无法将所有元素强制转换为目标类型,则会失败.
我会说方法2是安全的,因为它确保在添加演员表之前一切正常(即本地化风险).方法1可能允许将List(包含Cat,Dog,Dinosaur)转换为List
这个例子很好地解释了它.
根据Java文档,泛型仅限于编译时.一旦代码编译,它们就会消失,这称为Type Erasure.
现在,关于方法,方法1只是向列表添加强制转换而不检查其中存在的所有元素的类型.这意味着,如果List被转换为Cat类型,那么在运行时代码中的任何地方都可能会出现意外的ClasscastException,而它的结果是Dog.
方法2创建一个全新的列表,它遍历所有元素并尝试将每个元素转换为目标类型.意思是,如果无法将所有元素强制转换为目标类型,则会失败.
我会说方法2是安全的,因为它确保在添加演员表之前一切正常(即本地化风险).方法1可能允许将List(包含Cat,Dog,Dinosaur)转换为List
这个例子很好地解释了它.