java泛型基础

玩聚 2025-7-4 44 7/4

确实用AI学习容易忽略细节,学到一些似是而非的东西。现在甚至可以借助AI来写基础的技术博客了。

import java.util.ArrayList;
import java.util.List;

/*
 * 自定义泛型类(一个类适应多种类型)
 * —— 通过泛型类 Box<T>,实现复用性强的通用容器
 */
class Box<T> {
    private T content;

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

    public T getContent() {
        return content;
    }
}

/*
 * 有限制的泛型(确保类型有特定能力)
 * —— 限定泛型参数必须是 Number 的子类,从而保证某些操作(如 doubleValue)是合法的
 */
class NumberContainer<T extends Number> {
    private T value;

    public NumberContainer(T value) {
        this.value = value;
    }

    public double getSquare() {
        return value.doubleValue() * value.doubleValue();
    }
}

/*
 * 主类,包含泛型示例入口
 */
public class GenericForBeginners {
    public static void main(String[] args) {

        // ====================
        // 自定义泛型类(一个类适应多种类型)
        // ====================

        Box<Integer> intBox = new Box<>(123);
        System.out.println("整数盒内容: " + intBox.getContent());

        Box<String> strBox = new Box<>("Java真好学");
        System.out.println("字符串盒内容: " + strBox.getContent());

        // ====================
        // 集合使用泛型(避免强制类型转换)
        // ====================

        List unsafeList = new ArrayList(); // ❌ 未使用泛型,不安全
        unsafeList.add("hello");
        unsafeList.add(100);
        String text = (String) unsafeList.get(0); // 需要强制类型转换
        // Integer num = (Integer) unsafeList.get(0); // ❌ 运行时报错

        List<String> safeList = new ArrayList<>(); // ✅ 使用泛型,类型安全
        safeList.add("hello");
        // safeList.add(100); // ❌ 编译失败:类型不匹配
        String safeText = safeList.get(0); // 无需强转
        System.out.println("安全文本: " + safeText);

        // ====================
        // 泛型方法(方法适应多种类型)
        // ====================

        printThing(100);             // 自动推断为 Integer
        printThing(3.14);            // 自动推断为 Double
        printThing("泛型很简单");   // 自动推断为 String

        // ====================
        //有限制的泛型(确保类型有特定能力)
        // ====================

        NumberContainer<Double> doubleContainer = new NumberContainer<>(12.5);
        System.out.println("平方值: " + doubleContainer.getSquare());

        NumberContainer<Integer> intContainer = new NumberContainer<>(5);
        System.out.println("平方值: " + intContainer.getSquare());

        // ====================
        // 类型推断(不用重复写类型信息)
        // ====================

        List<String> names = createList(); // 编译器自动推断出 T 为 String
        names.add("小明");
        names.add("小红");

        System.out.println("\n名单:");
        for (String name : names) {
            System.out.println("- " + name);
        }
    }

    // 技巧3:泛型方法(支持任何类型)
    public static <T> void printThing(T thing) {
        System.out.println("--- 打印内容: " + thing);
    }

    // 技巧5:类型推断(返回值带泛型,自动推断调用类型)
    public static <T> List<T> createList() {
        return new ArrayList<>();
    }
}

 

运行结果

java GenericForBeginners
安全文本: hello
整数盒内容: 123
字符串盒内容: Java真好学
--- 打印内容: 100
--- 打印内容: 3.14
--- 打印内容: 泛型很简单
平方值: 156.25
平方值: 25.0

名单:
- 小明
- 小红

 

- THE END -
Tag:

玩聚

7月07日16:49

最后修改:2025年7月7日
0

非特殊说明,文章内容整理自互联网。

共有 0 条评论