gpt4 book ai didi

Java 泛型,将所有整数/vector 添加到列表中

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:41 25 4
gpt4 key购买 nike

我正在从 C++ 学习 Java 中的泛型,但对如何在不重载运算符的情况下进行数学运算感到困惑。假设我想写一个 sumList类只是一个带有求和方法的列表。

public class sumList<T extends CanAdd<T>> {
private List<T> list;

public sumList() {
list = new List<T>();
}

public void addElement(T t) {
list.add(t);
}

public T getSum() {
T ans = null;
for (T t : list) {
if (ans == null) {
ans = t;
} else {
ans = ans.plus(t);
}
}
return ans;
}
}

我使用的界面很简单:

public interface CanAdd<T>
{
// returns a new T that's the sum of the object + other
public T plus(T other);
}

所以当我创建 sumList 时这很简单我创建的类,一个 VectorPoint比如因为我可以添加接口(interface)定义的plus方法。但是,我将如何更改 sumList这样我也可以创建sumList<Double>sumList<Integer>

编辑:修复了小错误。

最佳答案

正如 Kaleb 所说,如果您只需要它来处理 Java Numbers,那么您不必担心接口(interface),只需使用 T extends Number。

但是如果你真的想让它更通用并使用你的 canAdd 接口(interface),那么你需要围绕 Number 对象编写一个包装类并改为使用它。

编辑

也许你看错了。与其让填充列表的类具有特定行为(在本例中为总和),不如从函数式编程中借鉴一些有用的技巧。

您可以用 Java 编写 map、reduce 和 filter 方法。您有一些样板文件可以让您到达可以使用它们的地步,但是您可以轻松地为您想要求和的每种类型的对象创建一个 reduce 函数,然后将其应用于您的列表。

关于Java 泛型,将所有整数/vector 添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9848304/

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