有界泛型的二元计算

时间:2017-08-27 07:33:32

标签: java generics recursion

我想创建一个函数来通过递归来计算多个类型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);
        }
    }
}

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结果。