我想创建一个
Object
的泛型类。
class Calculator<Object> {
// addition function for addition of two numbers (Integer , Float)
Object addition(Object first, Object second)
{
return ; //Should return as Object
}
}
提前致谢...
如果要定义泛型类,最好使用大写字母作为泛型类型名称,例如
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));