java - 通用类型扩展 Number、计算

标签 java generics math

我用一种方法制作了数学运算的接口(interface),计算,采用不同数量的参数

public interface MathOperation {
    public <T extends Number> T calculate(T... args);
}

这个类还有一个简单的实现,但不起作用:

private class Sum implements MathOperation {
    @Override
    public <T extends Number> T calculate(T... args) {
        return args[0] + args[1];
    }
}

问题是:

bad operand types for binary operator '+'
  first type:  T
  second type: T
  where T is a type-variable:
    T extends Number declared in method <T>calculate(T...)

我想要实现的是一个简单的类,例如两个 Double 并返回 Double 。

有可能实现这一目标吗?

最佳答案

+ 不能应用于扩展 Number 的类型。 new Integer(5) + new Integer(5) 由于自动装箱而有效。您必须查看 args 的运行时类型并执行相应的操作。

大致如下:

private class Sum implements MathOperation {
    @Override
    public <T extends Number> T calculate(Class<T> clazz, T... args) {
         if (clazz.equals(Integer.class))
         {
             return Integer.class.cast(args[0]) + Integer.class.cast(args[1]);
         } else (....) 
    }
}

关于java - 通用类型扩展 Number、计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14946947/

相关文章:

java - 凭据被 maven scmchangelog-plugin 忽略

java - 为什么 Class#getComponentType 返回 null 而不是 ArrayList (Java) 的泛型类型?

javascript - 视差算法不适用于固定元素

c++ - 快速等效于 STK 中引用的 DSP 的 sin()

java - 为什么这个正则表达式没有给出预期的输出?

java - 如何修复Java中的 'incompatible types: SomeObject cannot be converted to CAP#1'错误

swift - 覆盖通用函数会产生错误

c# - 你如何在 C# 中进行 *integer* 求幂?

java - 从单个类文件生成 Jar 文件

java - 如何获取嵌套类型内部结构的所有类型?