如何将泛型转换为字符串

时间:2019-04-21 09:40:54

标签: java string generics

我正在编写一个使用通用参数并将其转换为特定数据类型的函数,将其添加并返回添加的值。我已经对整数和双精度进行了此操作,但是对于字符串却无法做到这一点

我尝试过使用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

1 个答案:

答案 0 :(得分:2)

您的通用类型T被声明为扩展NumberString不扩展Number。这就是问题的根源。您的传入参数ab扩展了数字,因此可能不是String类型,或者您的T通用类型可能没有扩展Number

另一种解决方案是按原样使用您的方法,而不在其中处理String类型,并添加接收2个String参数的另一种方法。但是,请注意,添加2个字符串只会串联它们,因此“ 2” +“ 4”将为您提供“ 24”,这可能不是您想要/期望的。如果期望使用代表数字值的字符串,则需要编写自己的代码以将String参数解析为IntegerLongNumber接口的其他实现,然后添加他们起来

相关问题