java - 如何将泛型类型转换为字符串
问题描述
我正在编写一个使用泛型参数并将它们转换为特定数据类型的函数,添加它们并返回附加值。我已经为整数和双精度做了这个,但不能对字符串做同样的事情
我曾尝试使用 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
解决方案
您的 Generic 类型T
被声明为 extend Number
。String
不延长Number
。这是你问题的根源。您的传入参数a
和b
扩展编号可能不是类型String
,或者您的T
泛型类型可能不是扩展Number
。
另一种解决方案是让您的方法保持原样,而不是在那里处理String
类型,并添加另一个接收 2 个String
参数的方法。但是,请注意,添加 2 个字符串只是将它们连接起来,因此“2”+“4”会给你“24”,这可能不是你想要/期望的。如果您期望表示数值的字符串,则需要编写自己的代码来将String
参数解析为接口的Integer
或Long
其他实现,Number
然后将它们相加
推荐阅读
- python - 字典中键的多个值
- c# - How does PowerPoint distinguish which script out of latin/eastasian/complexscript is used for a Run?
- mysql - 在mysql中创建create语句时需要在一列中添加两个小时
- c# - 从 HUGE Xml 转换为 Json
- sql-server - 通过 keytab 连接到 SQL Server 时,在 keytab 文件中显示为 SPN 的警告不可用
- ansible - ansible-playbook 无法使用正则表达式
- sql - 如何获取日期范围内的数据总和
- c++ - 删除另一个类中一个类的对象时析构函数如何工作
- android - 我的应用无法在 Google Play 商店中搜索
- javascript - 如何使用此处的反向地理编码从所有检索到的数据中获取城市名称?