gpt4 book ai didi

java - 去除返回值中的通配符参数

转载 作者:行者123 更新时间:2023-11-30 09:33:12 26 4
gpt4 key购买 nike

我有一些代码在内部使用泛型。到目前为止一切都很好,直到通过公共(public) API 公开功能为止。问题与以下玩具示例相同:我有一个 List具有特定子类型的包装项目(本例中为 T extends Number)。当我想退回这个 List ,我目前正在返回 List<Wrapper<? extends Number>>这使得客户端代码非常冗长。

是否有可能将返回类型更改为 List<Wrapper<Number>> ?客户不需要知道包装器包含任何特定类型的数字。我尝试了几种转换方法,但它们都因编译错误而失败。

public static List<Wrapper<? extends Number>> getNumbers() {
Wrapper<Integer> number1 = new Wrapper<Integer>(1);
Wrapper<Double> number2 = new Wrapper<Double>(2.);

List<Wrapper<? extends Number>> numbers = new ArrayList<Wrapper<? extends Number>>();
numbers.add(number1);
numbers.add(number2);
return numbers;
}

class Wrapper<T extends Number> {
private final T item;
Wrapper(T item) {
this.item = item;
}
T getItem() {
return item;
}
}

最佳答案

根据您展示的关于您的 Wrapper 的内容类型,Wrapper<? extends Number> 正是您想要的情况,因为只能从您的 Wrapper 中取出元素(它是一个生产者),并且不可能放入元素。所以当你调用getItem()Wrapper<? extends Number> 上, 它返回一个 Number ,这就是你想要的。它怎么不符合您的需求?

“冗长”不是不放弃类型安全的正当理由。

关于java - 去除返回值中的通配符参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12336992/

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