我正在从C++学习Java中的泛型,并且很困惑如何在没有运算符重载的情况下进行数学运算。假设我想编写一个sumList
类,它只是一个使用求和方法的列表。Java泛型,添加列表中的所有整数/向量
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
S的我创建类,一个Vector
或例如Point
,因为我可以添加接口定义的加号方法。但是,如何更改sumList
以便我还可以创建sumList<Double>
或sumList<Integer>
?
编辑:修正小错误。
但是,你已经有什么阻止你实例化'sumList'和'sumList '? –
2012-03-24 01:19:18
@Kirk:'Integer'和'Double'都不能实现'canAdd'。 – 2012-03-24 01:21:12
我想你有一个错误:不应该是'ans = ans.plus(t);'而不是'ans = ans.add(t);'? – 2012-03-24 01:22:26