【发布时间】:2011-09-29 20:53:04
【问题描述】:
我想对相同类型的两个泛型参数执行一个操作,这两个泛型参数都扩展了 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;
}
为什么?
【问题讨论】:
-
您在尝试这样做时是否遇到错误?错误说明了什么?
-
+没有为Number定义! -
它无法编译。 Eclipse 说:运算符 + 未定义参数类型 T,T
-
@thomson_matt @Victor Sorokin @Oli Charlesworth 谢谢大家的帮助。我编辑了我的问题。
-
您的新示例由于其他原因无法编译。在运行时,由于 类型擦除,JVM 不知道它应该构造什么类型的
T。