我想创建一个函数来通过递归来计算多个类型Number(the class)的幂。以下行存在问题:
return base * NumberOpp.power(base, pow - 1);
它不知道如何执行'*'操作。我猜这是因为泛型类型。它有限,我认为可以解决问题。我试过施法(这有点难看。)它似乎也没有用。
return (T) (Number.doubleValue(base) * Number.doubleValue(NumberOpp.power(base, pow - 1)));
所有代码如下:
public class NumberOpp {
public static <T extends Number> T power(T base, int pow){
if (pow == 1) { /* If power is one return base */
return base;
}else{ /* Else recursivly multiply by base until power is one */
return base * NumberOpp.power(base, pow - 1);
}
}
}
答案 0 :(得分:1)
您只能对数字基元类型执行数值运算(例如乘法)。 Number
没有自动转换为原始数字类型,这就是您的<T extends Number>
类型绑定无法帮助的原因。
您可以决定执行特定数字类型的操作,例如double
:
public class NumberOpp {
public static <T extends Number> double power(T base, int pow) {
if (pow == 1) {
return base.doubleValue ();
} else {
return base.doubleValue () * NumberOpp.power(base, pow - 1);
}
}
}
这将接受任何数字类型作为输入,但始终会返回double
结果。