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