创建泛型类时如何使用Object?

问题描述 投票:0回答:1

我想创建一个

Object
的泛型类。

class Calculator<Object> {

         // addition function for addition of two numbers (Integer , Float)

    Object addition(Object first, Object second)
    {
        
        return  ;    //Should return as Object

    }
}

提前致谢...

java class object addition calculator
1个回答
0
投票

如果要定义泛型类,最好使用大写字母作为泛型类型名称,例如

class Calculator<T> {
    T addition(T first, T second) {
        //how to add two generic objects?
    }
}

也许您不想添加两个任意对象,但是

Number
s

class Calculator<T extends Number> {
    T addition(T first, T second) {
        return first + second; //does not compile!
    }
}

悲伤的消息是

Number
没有
add
方法,并且您不能只使用
+
运算符。也许你可以定义一个抽象类或接口

interface Calculator<T extends Number> {
    default T addition(@Nullable T first, @Nullable T second) {
        if (first == null || second == null) {
            return first == null ? second : first;
        }
        return nonNullAddition(first, second);
    }
    
    T nonNullAddition(@NotNull T first, @NotNull T second);
}

并针对您需要的案例实施

class IntCalculator implements Calculator<Integer> {
    @Override
    public Integer nonNullAddition(@NotNull Integer first, @NotNull Integer second) {
        return first + second;
    }
}

class BigDecimalCalculator implements Calculator<BigDecimal> {
    @Override
    public BigDecimal nonNullAddition(@NotNull BigDecimal first, @NotNull BigDecimal second) {
        return first.add(second);
    }
}

然而,这可能很麻烦。如果你不关心精度,你可以将所有内容转换为(更正确地说是扩大转换)到

double
;如果您关心精度,可以使用
BigDecimal

class Calculator {
    public double addition(double first, double second) {
        return first + second;
    }

    public BigDecimal addition(BigDecimal first, BigDecimal second) {
        return first.add(second);
    }
}

并按以下方式使用它:

double f = 1.0;
int i = 2;
Calculator calc = new Calculator();
double sum = calc.addition(f, i);
BigDecimal preciseSum = calc.addition(new BigDecimal(f), new BigDecimal(i));
© www.soinside.com 2019 - 2024. All rights reserved.