泛型到底怎么用Java开发者必看-掌握泛型编程的核心技巧

2025-05-02 18

Image

Java泛型使用指南

泛型(Generics)是Java 5引入的重要特性,它让开发者能够编写更安全、更灵活的代码。下面我将泛型的使用方法。

1. 泛型基本概念

泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数。

优点:

  • 类型安全:编译时进行类型检查
  • 消除强制类型转换
  • 提高代码重用性

2. 泛型类

// 定义一个泛型类
public class Box<T> {
    private T t;
    
    public void set(T t) {
        this.t = t;
    }
    
    public T get() {
        return t;
    }
}

// 使用
Box<String> stringBox = new Box<>();
stringBox.set("Hello");
String str = stringBox.get(); // 无需强制类型转换

3. 泛型方法

public class Util {
    // 泛型方法
    public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
        return p1.getKey().equals(p2.getKey()) &&
               p1.getValue().equals(p2.getValue());
    }
}

// 使用
Pair<Integer, String> p1 = new Pair<>(1, "apple");
Pair<Integer, String> p2 = new Pair<>(2, "pear");
boolean same = Util.<Integer, String>compare(p1, p2);

4. 类型通配符

// 通配符
public static void printList(List<?> list) {
    for (Object elem : list) {
        System.out.print(elem + " ");
    }
}

// 上界通配符
public static double sumOfList(List<? extends Number> list) {
    double s = 0.0;
    for (Number n : list) {
        s += n.doubleValue();
    }
    return s;
}

// 下界通配符
public static void addNumbers(List<? super Integer> list) {
    for (int i = 1; i <= 10; i++) {
        list.add(i);
    }
}

5. 泛型限制

  • 不能使用基本类型List<int> 错误,应该用 List<Integer>
  • 不能实例化泛型类型T obj = new T(); 错误
  • 不能声明静态泛型变量private static T instance; 错误
  • 不能对泛型参数使用instanceofif (obj instanceof T) 错误

6. 实际应用场景

集合框架

List<String> list = new ArrayList<>();
Map<Integer, String> map = new HashMap<>();

自定义数据结构

public class TreeNode<T> {
    private T value;
    private List<TreeNode<T>> children;
    // ...
}

工具类

public class Pair<A, B> {
    public final A first;
    public final B second;
    // ...
}

7. 实践

  1. 尽量使用泛型:提高代码类型安全性
  2. 避免使用原生类型:如应使用 List<String> 而非 List
  3. 优先使用通配符:增加API灵活性
  4. 合理使用边界extendssuper 正确使用

掌握泛型可以显著提高Java代码的质量和可维护性,是Java开发者必须掌握的核心技能之一。

(牛站网络)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关