侧边栏壁纸
博主头像
colo

欲买桂花同载酒

  • 累计撰写 1823 篇文章
  • 累计收到 0 条评论

设计一个简单的泛型类

2025-12-13 / 0 评论 / 4 阅读

题目

设计一个简单的泛型类

信息

  • 类型:问答
  • 难度:⭐

考点

泛型类定义,类型参数使用,类型安全

快速回答

实现一个泛型类 Box<T>,包含:

  • 私有字段 content(类型为 T)
  • 带参数的构造方法
  • getContent()setContent() 方法
  • main 方法中分别用 StringInteger 类型测试
## 解析

原理说明

泛型允许在定义类/接口/方法时使用类型参数,在实例化时指定具体类型。主要作用:

  • 类型安全:编译时检查类型匹配,避免运行时 ClassCastException
  • 代码复用:一套逻辑处理多种数据类型
  • 消除强制转换:编译器自动插入类型转换代码

代码示例

// 1. 定义泛型类
public class Box<T> {
    private T content;  // 类型参数T

    public Box(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }

    public void setContent(T content) {
        this.content = content;
    }

    // 2. 测试代码
    public static void main(String[] args) {
        // String类型实例
        Box<String> stringBox = new Box<>("Hello");
        System.out.println(stringBox.getContent().toUpperCase());  // 自动识别为String

        // Integer类型实例
        Box<Integer> intBox = new Box<>(100);
        System.out.println(intBox.getContent() + 50);  // 自动识别为Integer

        // 类型错误示例(编译时报错)
        // stringBox.setContent(123);  // 错误: 不兼容的类型
    }
}

最佳实践

  • 使用大写单字母命名类型参数(如 T, E, K, V)
  • 优先使用 new Box<>() 钻石语法(Java 7+)
  • 避免使用原生类型(如 Box rawBox = new Box()),会失去类型安全

常见错误

  • 类型不匹配Box<String> box = new Box<Integer>(10);(编译错误)
  • 基本类型限制:不能使用基本类型(如 Box<int>),需用包装类 Box<Integer>
  • 静态成员误用:静态字段/方法不能使用类的类型参数

扩展知识

  • 类型擦除:泛型在编译后会被替换为 Object(或边界类型),运行时无泛型信息
  • 有界类型参数<T extends Number> 限制 T 必须是 Number 子类
  • 通配符Box<?> 表示未知类型,常用于方法参数