首页 > 解决方案 > 如何将泛型类型转换为字符串

问题描述

我正在编写一个使用泛型参数并将它们转换为特定数据类型的函数,添加它们并返回附加值。我已经为整数和双精度做了这个,但不能对字符串做同样的事情

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

标签: javastringgenerics

解决方案


您的 Generic 类型T被声明为 extend NumberString不延长Number。这是你问题的根源。您的传入参数ab扩展编号可能不是类型String,或者您的T泛型类型可能不是扩展Number

另一种解决方案是让您的方法保持原样,而不是在那里处理String类型,并添加另一个接收 2 个String参数的方法。但是,请注意,添加 2 个字符串只是将它们连接起来,因此“2”+“4”会给你“24”,这可能不是你想要/期望的。如果您期望表示数值的字符串,则需要编写自己的代码来将String参数解析为接口的IntegerLong其他实现,Number然后将它们相加


推荐阅读