有人能告诉我为什么这段代码会给我一个编译错误吗?
public class Main {
public static void main(String[] args) {
System.out.println(sum(2, 6.9));
}
public static <T extends Number<T>> T sum(T a, T b) {
T result = a + b; // compile-error here
return result;
}
}
答案 0 :(得分:5)
Number
不是通用类,因此您无法对其进行参数化:
public abstract class Number implements java.io.Serializable {
...
}
此外,+
运算符仅适用于基本类型,如int
,long
等,而不是Number
类型Integer
,{Long
1}}等等(编辑:它将通过拆箱操作,是的,但它不能自动将结果包装在适当的包装类中。)
(你偶然发现Number
是多态性的一个不好的例子的原因之一。它实际上只执行对象到原始的转换。)
答案 1 :(得分:2)
您可以使用
创建界面public interface ALU <T extends Number> {
public T add(T a, T b);
}
让你的主类实现创建的界面。
public class Main implements ALU <Integer>.
在主类中创建方法add。
public Integer add(Integer a, Integer b){
return a + b;
}
这将有效。
答案 2 :(得分:1)
你必须使用:
a.doubleValue()+b.doubleValue()
由于Number是一个类,不支持operator +
答案 3 :(得分:0)
错误The operator + is undefined for the argument type(s) T, T
是由The type Number is not generic; it cannot be parameterized with arguments <T>
eclipse中突出显示的错误提供了此信息,不确定其他IDE是否提供相同的信息。