import java.util.Scanner; public class Calculator<T extends Number> { // 泛型方法 add 接受两个 T 类型的参数并返回它们的和 public Double add(T a, T b) { double sum = a.doubleValue() + b.doubleValue(); return sum; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入两个 Integer 值 System.out.println("请输入两个整数,用空格分隔:"); int int1 = scanner.nextInt(); int int2 = scanner.nextInt(); // 创建 Integer 类型的 Calculator 实例并计算和 Calculator<Integer> intCalculator = new Calculator<>(); Double intSum = intCalculator.add(int1, int2); System.out.println("整数和为:" + intSum); // 输出整数和 // 输入两个 Double 值 System.out.println("请输入两个浮点数,用空格分隔:"); double double1 = scanner.nextDouble(); double double2 = scanner.nextDouble(); // 创建 Double 类型的 Calculator 实例并计算和 Calculator<Double> doubleCalculator = new Calculator<>(); Double doubleSum = doubleCalculator.add(double1, double2); System.out.println("浮点数和为:" + doubleSum); // 输出浮点数和 scanner.close(); } }
时间: 2025-03-17 20:04:57 浏览: 52
### Java 泛型加法计算器示例
为了实现一个支持泛型的加法计算器程序,可以通过定义一个通用的类或方法来处理不同类型的数值运算。以下是基于 Java 的泛型机制设计的一个简单加法计算器的示例代码及其解释。
#### 示例代码
```java
public class GenericAdder<T extends Number> {
private T num1;
private T num2;
public GenericAdder(T num1, T num2) {
this.num1 = num1;
this.num2 = num2;
}
public double add() {
return num1.doubleValue() + num2.doubleValue(); // 将Number类型转为double进行计算[^4]
}
public static void main(String[] args) {
// 整数相加
GenericAdder<Integer> intAdder = new GenericAdder<>(5, 10);
System.out.println("Integer Addition Result: " + intAdder.add());
// 浮点数相加
GenericAdder<Double> doubleAdder = new GenericAdder<>(3.5, 7.2);
System.out.println("Double Addition Result: " + doubleAdder.add());
}
}
```
#### 代码解析
1. **泛型类声明**
`GenericAdder<T>` 是一个泛型类,其中 `<T>` 表示该类可以接受任意的数据类型。这里进一步约束了泛型参数 `T` 必须继承自 `Number` 类 (`<T extends Number>`),从而确保传入的对象具有基本的数值操作能力。
2. **构造函数初始化**
构造函数接收两个参数并将其赋值给实例变量 `num1` 和 `num2`。这些变量将在后续的操作中被使用。
3. **核心逻辑——加法功能**
方法 `add()` 实现了两数之和的功能。由于 `Number` 类提供了 `.doubleValue()` 方法,因此可以直接调用此方法将任何子类对象(如 `Integer`, `Float`, 或 `Double`)转换成双精度浮点数后再执行加法运算。
4. **测试部分**
在 `main` 函数中分别创建了一个针对整数 (Integer) 和浮点数 (Double) 的加法器实例,并打印其结果验证正确性。
---
### 关键概念说明
- **泛型的意义**: 使用泛型可以让同一个类或者方法适用于多种数据类型,减少了重复编码的工作量的同时也提高了代码的安全性和可读性。
- **Lambda表达式与不变性**: 虽然本案例未涉及 lambda 表达式,但在实际开发过程中如果需要结合匿名内部类或函数式接口,则需要注意 lambda 参数默认视为 final 不可修改这一特性[^2]。
---
阅读全文
相关推荐
















