算术与通用数字

所以我必须接受一个generics类型T,它将是一个数字原语的包装类,并对它进行一些算术运算。 我认为这将是微不足道的,因为自动装箱和拆箱:

T newval = val1*val2; 

(其中val1和val2已经是T类型的变量,其中包含适当的值。)

但事实certificate,如果Java在编译时没有明确地知道类型,那么它将不会取消装箱值。 我还以为我可以使用multiply方法,每个Number子类(我打算使用)都在其中。 所以我宣布我的课程:

 public class SomeClass { // ... } 

接着:

 T newval = val1.multiiply(val2); 

但这不起作用,因为我猜不是所有子类的Number都是必需的(为什么他们不使用这个接口?)来拥有那个方法(但是我想要使用的所有那些DO。)

我已经看到了一些类似的问题,但它们都导致OP被告知不使用generics,但我需要使用generics来完成我正在做的工作,否则整个事情就毫无价值。 任何人都能想到一个对我有用的解决方案吗?

编辑:好的,所以他回到我身边并澄清了它的含义,它的不同之处在于我的问题与我正在做的事情不再相关。 多谢你们。

各种算术运算符只能应用于可转换为基本类型的类型的值。 没有办法用generics来表达这个要求。 因此,generics不适合这项任务。

对于generics方法,而是为数字基元类型提供重载。 对于generics类,请提供使用特定数字类型的子类。

 class NumericCalculator { public void calculate(T one, T two) { T result = one * two; // compiler error } } class LongCalculator extends NumericCalculator { public void calculate(Long one, Long two) { Long result = one * two; // yes } } 

使用运算符的实现必须在知道实际类型的子类中。