【发布时间】:2015-04-29 12:02:23
【问题描述】:
我想做这样的类来计算平均值:
public static class AverageValue<T extends Number> {
T data = 0; //ERROR: incompatible types: int cannot be converted to T
int count = 0;
public AverageValue() {}
public AverageValue(T data) {
this.data = data;
count = 1;
}
public void add(T num) {
data+=num; //ERROR: bad operand types for binary operator '+'
count++;
}
public T average() {
return data/(T)count; //ERROR: incompatible types: int cannot be converted to T
}
}
我真的不明白为什么我们有接口 Number 如果它不抽象数字。因为这就是接口所做的 - 对数据进行抽象操作,而不是自己保存数据。
上面还清楚地表明,您可能永远无法实现自己的数字实现(例如,对于一些非常怪异的实验性数学程序,具有无限大小和精度的数字)。
我用Number 代替了通用T 进行了同样的尝试,结果完全相同。唯一不同的是Number x = 0实际上是有效的。
有没有办法欺骗 java 来编译它,还是我必须是一个“专业”的 java 程序员并使用双精度来计算字节数组的平均值?
【问题讨论】:
-
Number是接口,不是原始类型,所以不支持这些操作数。而且您不需要使用双打,只需检查实际类是什么并对其执行操作即可。 -
"有没有办法欺骗 java 进行编译" 不,
Number在 Java 中没有特权,所以编译器的反应方式与您尝试Car+Car的方式相同。
标签: java inheritance interface