java - 使用语言运算符和泛型类扩展号的Java,如何使用泛型

  显示原文与译文双语对照的内容

我想对两个扩展数的泛型参数执行一个操作。

是否可以能我总是用于调用泛型参数的方法,但是运算符( 。运算符+ 对于参数类型T,T,未定义)的问题似乎存在一些问题。


public static <T extends Number> T sum(T a, T b){


 return a+ b;


}



我做错什么了?

编辑:我尝试改进我的问题。 我知道运算符不是为类型号定义的。 这有点令人烦恼,因为在不引入 @Victor Sorokin建议的新接口之前执行这样的操作是很好的。

但我还是不明白 如果运算符没有在类号中实现,那么至少应该在双类中实现,因为我可以使用+ 运算符。 这一行代码都不会编译:


public static <T extends Double> 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 ( 除字符串外,当参数之一为字符串时,其他类型通过 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());


}



Ugly,不是=D?

原作者:
...