在Java中,我有两个Object加上加号(+),例如两个int或两个String。我如何编写一个函数来真正添加它们而无需指定类型?

注意:我不想要C ++函数模板之类的东西,因为两个操作数只是Object,即我想实现一个函数add

Object add(Object a, Object b){
    // ?
}


然后可以执行以下操作:

Object a = 1, b = 2;
Object c = add(a, b);

最佳答案

我也需要类似的东西,所以我拍了一些东西,希望它们返回的类型与内置加法运算符将返回的类型相同(除非转换为Object)。我用java spec弄清了类型转换的规则,特别是第5.6.2节“二进制数字提升”。我还没有测试过:

public Object add(Object op1, Object op2){

    if( op1 instanceof String || op2 instanceof String){
        return String.valueOf(op1) + String.valueOf(op2);
    }

    if( !(op1 instanceof Number) || !(op2 instanceof Number) ){
        throw new Exception(“invalid operands for mathematical operator [+]”);
    }

    if(op1 instanceof Double || op2 instanceof Double){
        return ((Number)op1).doubleValue() + ((Number)op2).doubleValue();
    }

    if(op1 instanceof Float || op2 instanceof Float){
        return ((Number)op1).floatValue() + ((Number)op2).floatValue();
    }

    if(op1 instanceof Long || op2 instanceof Long){
        return ((Number)op1).longValue() + ((Number)op2).longValue();
    }

    return ((Number)op1).intValue() + ((Number)op2).intValue();
}


从理论上讲,您可以使用数字引用类型,数字基元类型甚至字符串来调用此方法。

10-07 19:32
查看更多