我用一种方法制作了数学运算的接口(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/