gpt4 book ai didi

java - 为什么在使用有界类型参数时需要强制转换

转载 作者:行者123 更新时间:2023-11-29 08:41:28 30 4
gpt4 key购买 nike

我一直在玩泛型,现在我很好奇为什么我需要在将“new Special()”添加到 Set 之前将其转换为 E。我知道在这种情况下这并不是真正需要的,因为我也可以使用一组 Base...

private static class Base {}
private static class Special extends Base{}

private <E extends Base> Set<E> doSomething(){
Set<E> someset = new HashSet<>();
someset.add(new Special());
return someset;
}

最佳答案

假设你有这个:

final class SomethingElse extends Base {}

还有这个:

private <E extends Base> doSomething(Set<E> someset) {
someset.add(new Special());
}

你现在能看出问题了吗?

E extends Base 表示“E 是一个 unknown 类型,它扩展了 Base”。这并不意味着“E任何 扩展 Base 的类型。”

在上面的例子中,问题在于可以这样调用 doSomething():

Set<Special> onlySpecials = new HashSet<>();
doSomething(onlySpecials);
onlySpecials.stream()
.findFirst()
.ifPresent(Special::someSpecializedMethod); /* Boom! ClassCastException! */

关于java - 为什么在使用有界类型参数时需要强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855558/

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