gpt4 book ai didi

java - 为什么 Java 强制强制转换泛型类型?

转载 作者:行者123 更新时间:2023-12-02 09:46:57 25 4
gpt4 key购买 nike

我不明白为什么当参数化类型被定义为扩展基类时编译器看不到强制转换是安全的。以下是一些在我看来应该是不必要的强制转换示例。此外,当我确实包含强制转换时,我的 IDE (IntelliJ IDEA) 会警告强制转换未经检查,好像表明我做错了什么。是否有一种习惯用法可以避免这些强制转换和警告?鉴于声明声明该类型扩展了基类,为什么还需要强制转换?

class Shape {}

class Polygon extends Shape {}

public class Foo<T extends Shape>
{
Set<Polygon> polygons;
// Why must this be cast?
Set<T> shapes = (Set<T>) new HashSet<Polygon>();

T getFirst()
{
// Why must this be cast?
return (T) polygons.iterator().next();
}

Iterable<T> getShapes()
{
// Why must this be cast?
return (Iterable<T>) polygons;
}
}

最佳答案

假设您已经像这样实例化了您的类:

Foo<Circle> circleFoo = new Foo<Circle>( );

然后,Set<Circle>无法安全分配 HashSet<Polygon>

getFirst :您无法安全施放 PolygonCircle

getShapes :您无法安全地施放 Iterable<Polygon>Iterable<Circle> .

关于java - 为什么 Java 强制强制转换泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com