gpt4 book ai didi

java - 在方法中使用不同的 getter

转载 作者:行者123 更新时间:2023-11-29 09:51:32 26 4
gpt4 key购买 nike

给定以下方法

public int calcSum(List<MyClass> items) {
return items.stream()
.mapToInt(i -> i.getHeight())
.sum();
}

我有哪些选择可以使用不同的 getter,我可以将这些 getter 传递到方法的参数中,这样我就不必使用 getWeight() 重复相同的返回语句?

我正在考虑使用一种不同的方法来返回 getter(如果可能的话),但我在考虑一个好的实现时遇到了麻烦。感谢您的帮助!

最佳答案

传入 ToIntFunction<T> 作为参数:

public <T> int calcSum(List<T> items, ToIntFunction<? super T> fn) {
return items.stream()
.mapToInt(fn)
.sum();
}

// Example invocations:
int heightSum = calcSum(items, MyClass::getHeight);
int weightSum = calcSum(items, MyClass::getWeight);

<? super T>是一个bounded wildcard (特别是下界通配符)。它只是让 API 更灵活一点。例如,因为通配符,你可以调用:

ToIntFunction<Object> constantValue = a -> 1;
int count = calcSum(items, constantValue);

因为 constantValue接受任何 Object , 它也可以接受 MyClass实例。

没有边界,您将无法传入 ToIntFunction<Object>。 :对于不同的列表元素类型,您需要有单独的实例:

ToIntFunction<MyClass> constantValueForMyClass = a -> 1;
ToIntFunction<MyOtherClass> constantValueForMyOtherClass = a -> 1;
ToIntFunction<YetAnotherClass> constantValueForYetAnotherClass = a -> 1;
// ...

这是乏味和重复的。

关于java - 在方法中使用不同的 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56780574/

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