我想对两个扩展Number的相同类型的泛型参数执行操作。
可能吗? 我总是习惯在泛型参数上调用方法,但似乎使用运算符存在一些问题(对于参数类型T,T,运算符+未定义。)
public static <T extends Number> T sum(T a, T b){
return a+ b;
}
我做错了什么?
编辑: 我试着改善一点我的问题。我知道运营商没有为Number类型定义。这件事有点让人伤心,因为在不引入@Victor Sorokin建议的新界面的情况下执行这样的操作会很好。
但我仍然不明白一件事:如果运算符没有在Number类中实现,那么至少在Double类中应该实现,因为我可以使用+运算符和double。 这些代码行都不会编译:
public static <T extends Double> T sum(T a, T b){
T c = a +b;
}
为什么?
答案 0 :(得分:4)
这是不可能的,因为Number
没有与之关联的+运算符。特别是,你不能这样做:
Number a = new Integer(1);
Number b = new Integer(2);
Number c = a + b;
答案 1 :(得分:2)
Java中的类没有+
运算符(String除外,当其中一个参数为String时,通过toString()
隐式转换其他类型)。所以,让你输入一些接口,比如说
interface Valuable {
// use richest built-in numeric type
double value();
Valuable value(double v);
}
public static <T extends Valuable> T sum(T a, T b){
return a.value(a.value() + b.value());
}
丑陋,不是吗? = d