java泛型基本知识和通用方法

yizhihongxing

Java泛型基本知识和通用方法攻略

1. 泛型的概念

泛型是Java 5中引入的一个新特性,它是为了解决在使用集合时发现的类型安全问题而设计的。泛型的本质就是参数化类型,即将类型作为参数传递。

在使用泛型时,需要知道以下几个关键字:

  • 类型参数:使用尖括号<>括起来的类型名称,可以是任何标识符,但通常使用单个大写字母(如TEK表示Key、V表示Value等)表示泛型类型。
  • 泛型类:带有泛型类型参数的类,例如List<T>
  • 泛型方法:带有泛型类型参数的方法,例如<T> T getInstance(Class<T> clazz)

2. 基本语法

泛型的基本语法是在类型后面添加尖括号<>,并将泛型类型参数放在其中,例如:

public class MyClass<T> {
    // ...
}

在使用泛型类时,需要指定具体的泛型类型,例如:

MyClass<String> instance = new MyClass<String>();

这里将MyClass的泛型类型参数T指定为String,这样在使用MyClass类的方法时,就可以直接传入String类型的参数。

3. 泛型的通配符

通配符用于表示泛型类型的未知实参。有时候我们需要在使用泛型类时,对泛型类型的范围进行限制,这时候就可以使用通配符。通配符有两种,一种是?表示可以接受任何类型的实参,另一种是? extends 类型,表示可以接受所有该类型以及其子类型的实参。

例如:

public void printList(List<?> list) {
    for (Object obj : list) {
        System.out.println(obj);
    }
}

这里使用了?通配符表示可以接受任何类型的List对象,如果使用List<String>List<Integer>等具体类型的实参都是可以的。

4. 泛型的限定

泛型的限定是指对泛型类型参数的取值范围进行限制,主要有以下两种:

  • 上限限定:使用extends关键字限制泛型类型参数的上限,表示只能接受该类型及其子类型的实参。
  • 下限限定:使用super关键字限制泛型类型参数的下限,表示只能接受该类型及其父类型的实参。

例如:

public <T extends Number> T addList(List<T> list) {
    // ...
}

public void printList(List<? super Integer> list) {
    // ...
}

第一个方法中,使用了extends关键字限制泛型类型参数T必须是Number及其子类,这样就可以在方法中调用Number及其子类的方法。

第二个方法中,使用了super关键字限制泛型类型参数?必须是Integer及其父类,这样就可以将Integer对象及其父类对象添加到List中。

5. 示例说明

示例一:泛型类的定义和使用

public class Pair<T, V> {
    private T first;
    private V second;

    public Pair(T first, V second) {
        this.first = first;
        this.second = second;
    }

    public T getFirst() {
        return first;
    }

    public V getSecond() {
        return second;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public void setSecond(V second) {
        this.second = second;
    }
}

// 使用泛型类Pair
Pair<String, Integer> pair = new Pair<>("Hello", 123);
System.out.println(pair.getFirst()); // 输出"Hello"
System.out.println(pair.getSecond()); // 输出123

在这个例子中,我们定义了一个泛型类Pair,它有两个泛型类型参数TV,分别表示成对出现的两个元素的类型。在使用泛型类时,可以指定具体的泛型类型来实例化一个对象,例如Pair<String, Integer>表示第一个元素为String,第二个元素为Integer

示例二:泛型方法与通配符的使用

public class Utils {
    public static <T> T max(List<? extends T> list) {
        if (list == null || list.isEmpty()) {
            return null;
        }
        T result = list.get(0);
        for (T item : list) {
            if (item.compareTo(result) > 0) {
                result = item;
            }
        }
        return result;
    }
}

// 使用泛型方法
List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
Integer max1 = Utils.max(list1);
System.out.println(max1); // 输出5

List<String> list2 = Arrays.asList("apple", "banana", "orange");
String max2 = Utils.max(list2);
System.out.println(max2); // 输出"orange"

在这个例子中,我们定义了一个泛型方法max,它接受一个List对象,并使用通配符<? extends T>限制该对象的类型范围为T及其子类。在方法中,使用类型参数T表示返回值的类型,并使用compareTo方法比较列表中的元素大小。在使用泛型方法时,可以直接传入一个List<Integer>List<String>等具体类型的参数,返回值会根据具体类型而确定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java泛型基本知识和通用方法 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • CentOS7环境下gcc(版本10.2.0)升级详细过程

    下面我将针对“CentOS7环境下gcc(版本10.2.0)升级详细过程”进行完整的讲解攻略。 准备工作 在进行gcc升级之前,我们需要先安装一些必要的依赖库和工具: sudo yum install -y gcc gcc-c++ glibc-devel glibc-static libstdc++-devel zlib-devel tar wget 升级过…

    other 2023年6月26日
    00
  • 浅谈PHP无限极分类原理

    浅谈PHP无限极分类原理 什么是无限极分类 无限极分类是指一个分类的层级数不确定,随着数据的增加,分类的层级数可能会不断增加。类似于“树”的结构,每个分类可以有多个子分类,每个子分类又可以有多个孙分类,一直延伸下去,直到最后一层分类。 实现无限极分类 实现无限极分类的方法主要有两种: 递归算法 递归算法是指在函数内部调用自身的一种算法。在实现无限极分类的时候…

    other 2023年6月27日
    00
  • C语言修炼之路一朝函数思习得 模块思维世间生下篇

    C语言修炼之路一朝函数思习得 模块思维世间生下篇攻略 简介 本攻略旨在帮助初学者掌握C语言中的函数思维和模块思维,从而提升编程能力和代码的可维护性。以下是攻略的详细步骤。 步骤 1. 理解函数思维 函数是C语言中的基本构建块,具有独立的功能和输入输出。通过函数,我们可以将程序分解为更小的、可重用的模块,提高代码的可读性和可维护性。 示例1: 计算两个数的和 …

    other 2023年7月28日
    00
  • SSM实现mysql数据库账号密码密文登录功能

    下面我来为您详细讲解“SSM实现mysql数据库账号密码密文登录功能”的完整攻略。 1. 配置数据库 首先,我们需要在程序中配置 mysql 数据库。在 Spring 中,可以使用 MyBatis框架来操作数据库,因此我们需要引入 MyBatis相关依赖。 示例一: <!– 在 pom.xml 中引入 MyBatis 相关依赖 –> <…

    other 2023年6月27日
    00
  • 循环英雄星宇宝珠怎么获得 修改数据及存档复制方法

    循环英雄星宇宝珠是一款非常有趣的游戏,许多玩家希望了解如何获得、修改数据及进行存档复制。下面是对此的完整攻略: 获得循环英雄星宇宝珠 循环英雄星宇宝珠的获得方式主要有两种: 1. 通过通关副本获得 玩家可以通过完成游戏内不同的副本来获得星宇宝珠。每个副本都有不同的难度级别,难度越高,获得的宝珠数量也会越多。 除此之外,通关所有的副本还可以获得额外的奖励,例如…

    other 2023年6月27日
    00
  • 用Python制作灯光秀短视频的思路详解

    用Python制作灯光秀短视频的思路详解 简介 灯光秀短视频是一种通过控制灯光的亮灭和颜色变化来展示特定图案或效果的视频。在Python中,我们可以利用一些库和工具来实现这个目标。下面是一个详细的攻略,介绍了制作灯光秀短视频的完整思路和过程。 步骤 步骤一:安装所需库和工具 首先,我们需要安装一些Python库和工具来帮助我们制作灯光秀短视频。以下是一些常用…

    other 2023年7月29日
    00
  • React的生命周期函数初始挂载更新移除详解

    当我们在使用React进行开发时,会涉及到很多组件的内容,比如组件的数据、状态、渲染等。React提供了一些生命周期函数,用来处理组件的渲染、更新和卸载等过程。这篇攻略主要介绍React的生命周期函数,并对其进行详细解析。 React组件的生命周期 React组件的生命周期包括3个部分:初始挂载、更新和卸载。其中,初始挂载是指组件第一次被创建并插入到DOM中…

    other 2023年6月27日
    00
  • 微信小程序 循环及嵌套循环的使用总结

    微信小程序 循环及嵌套循环的使用总结 在微信小程序中,循环是一种非常常见的操作,它可以帮助我们重复执行一段代码,从而简化开发过程。本文将详细讲解微信小程序中循环及嵌套循环的使用,并提供两个示例说明。 循环的基本语法 微信小程序支持两种类型的循环:for循环和while循环。 for循环 for循环是一种常用的循环结构,它可以按照指定的次数重复执行一段代码。其…

    other 2023年7月28日
    00
合作推广
合作推广
分享本页
返回顶部