gpt4 book ai didi

java - 如何实现通用计算器类

转载 作者:行者123 更新时间:2023-12-05 07:28:02 24 4
gpt4 key购买 nike

一位讲师最近布置了一个任务,即编写一个用于计算整数和 double 的小型计算器类。按照措辞,作业包含以下内容:

public final class Calculator {

public int add(int augend, int addend) { return augend + addend; }
public double add(double augend, double addend) { return augend + addend; }

public int subtract(int minuend, int subtrahend) { return minuend - subtrahend; }
public double subtract(double minuend, double subtrahend) { return minuend - subtrahend; }

public int divide(int dividend, int divisor) { return dividend / divisor; }
public double divide(double dividend, double divisor) { return dividend / divisor; }

public int multiply(int multiplicand, int multiplier) { return multiplicand * multiplier; }
public double multiply(double multiplicand, double multiplier) { return multiplicand * multiplier; }
}

不过我想知道,如果这些方法在功能上是相同的是否可以通过使用泛型以某种方式消除功能的重复?

我已经尝试了几种方法来实现这一点,最新的方法是使整个类通用如下,但在实际将数学运算应用于变量时仍然卡住了

public class Calculator<T extends Number> {
public T add(T augend, T addend) {
// addition is the same for any number type
return augend + addend; // "operator '+' cannot be applied to 'T','T'"
}
// etc...
}

无论我尝试哪种方法,都会出现错误消息或其变体...有更好的方法吗? (有或没有泛型)

最佳答案

我不认为你可以在类型 T 上应用运算符。因为在编译期间,如果是无界类型,这将被替换为对象,如果是有界类型,它将被替换为第一个绑定(bind)。引用https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html .在下面的代码中,它将被 Number 替换,但 Number 不适用于运算符。您可以像这样创建一个通用接口(interface):

interface Calc<T extends Number>{
T add(T a, T b);
}

现在为整数和 double 创建具体类

class IntegerCalc implements Calc<Integer>{
@Override
public Integer add(Integer a, Integer b) {
return a+b;
}
}

class DoubleCalc implements Calc<Double>{
@Override
public Double add(Double a, Double b) {
return a+b;
}
}

关于java - 如何实现通用计算器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53617993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com