我正在编写一个使用通用参数并将其转换为特定数据类型的函数,将其添加并返回添加的值。我已经对整数和双精度进行了此操作,但是对于字符串却无法做到这一点
我尝试过使用toString()函数以及String构造函数,但似乎没有任何作用!
public static <T extends Number> T add(T a, T b) {
if (a instanceof Integer) {
return (T) Integer.valueOf(a.intValue() + b.intValue());
} else if (a instanceof Double) {
return (T) Double.valueOf(b.doubleValue() + b.doubleValue());
} else if (a instanceof String) {
return (T) String.valueOf(a.toString() + b.toString());
}
}
我希望它应该返回泛型类型参数,但是会引发一些编译时错误:
java: incompatible types: T cannot be converted to java.lang.String
和
ava: incompatible types: java.lang.String cannot be converted to T
答案 0 :(得分:2)
您的通用类型T
被声明为扩展Number
。 String
不扩展Number
。这就是问题的根源。您的传入参数a
和b
扩展了数字,因此可能不是String
类型,或者您的T
通用类型可能没有扩展Number
。
另一种解决方案是按原样使用您的方法,而不在其中处理String
类型,并添加接收2个String
参数的另一种方法。但是,请注意,添加2个字符串只会串联它们,因此“ 2” +“ 4”将为您提供“ 24”,这可能不是您想要/期望的。如果期望使用代表数字值的字符串,则需要编写自己的代码以将String
参数解析为Integer
或Long
或Number
接口的其他实现,然后添加他们起来