通过自动/拆箱操作泛型

时间:2014-10-08 15:31:21

标签: java generics autoboxing unboxing

public class Generics {

    public static <T> T increaseBalance (T amount){
        //say I want to increase the amount here, put it into finalBalance and return
        return finalBalance;
    }

    public static void main(String[] args){
        System.out.println(increaseBalance (new Integer(10)));
        System.out.println(increaseBalance (new Double(20)));
    }

}

您好。我只是进入泛型和自动/拆箱。在这个简单的代码段中,我尝试向increaseBalance(T amount)方法发送两个不同的对象,并希望将金额增加10并返回最终余额。怎么能实现这一目标?这将使我对泛型和自动/拆箱的理解更加清晰。非常感谢。

1 个答案:

答案 0 :(得分:4)

遗憾的是,将+运算符应用于通用类型T并不容易。

您有两种选择:

  • 重载

  • 检查类型并转换为特定的盒装类型

如果选择重载,则可以为每种可能的参数类型实现两种方法。

public static Integer increaseBalance (Integer amount){
    return amount + 10;
}

public static Double increaseBalance (Double amount){
    return amount + 10;
}

如果你想坚持使用泛型方法,你必须检查参数类型然后进行强制转换。

public static <T extends Number> Number increaseBalance (T amount){
    Number result = null;
    if (amount instanceof Integer) {
        result = new Integer((Integer) amount + 10);
    } else if (amount instanceof Double) {
        result = new Double((Double) amount + 10);
    } else {
        //do nothing
    }
    return result;
}