一篇文章带你搞定JAVA泛型

一篇文章带你搞定JAVA泛型

什么是泛型?

Java 泛型(Generics)是 JDK5.0 引入的新特性。将类型作为参数进行传递即为泛型。泛型可以提高程序的安全性和可读性。

泛型的声明与使用

泛型的声明:使用尖括号 <> 定义一个类型参数,然后应用到类、接口或方法的参数、返回值等变量类型的定义当中。

public class MyClass<T> {
    T obj;

    public MyClass(T obj) {
        this.obj = obj;
    }

    public T getObject() {
        return this.obj;
    }
}

泛型的使用:在创建对象、方法调用、类实现接口等使用时,需要确定泛型的具体类型参数。

MyClass<Integer> mc = new MyClass<>(10);
int number = mc.getObject();

通配符

通配符是一种不确定的类型参数,使用 ? 表示。通配符的主要作用是让方法能接受不同的泛型类型参数。

上限通配符

使用 extends 关键字限定泛型类型的上限。如下例,泛型类型为 Number 或 Number 的子类。

public void printNumberList(List<? extends Number> list) {
    for (Number n : list) {
        System.out.println(n);
    }
}

下限通配符

使用 super 关键字限定泛型类型的下限。如下例,泛型类型为 Integer 或 Integer 的父类。

public void addInteger(List<? super Integer> list) {
    list.add(12);
    list.add(23);
}

泛型类和泛型方法

泛型类和泛型方法可以为一个类或方法定义的类型参数提供更大的灵活性。

public class Box<T> {
    private T object;

    public void setObject(T object) {
        this.object = object;
    }

    public T getObject() {
        return object;
    }

    public <U extends Number> void inspect(U u) {
        System.out.println("T: " + object.getClass().getName());
        System.out.println("U: " + u.getClass().getName());
    }
}

示例

示例一:使用泛型提高程序安全性和可读性

比较使用泛型和不使用泛型的差异。

List list = new ArrayList();
list.add("hello");
String str = (String)list.get(0); // 需要强制类型转换

List<String> strList = new ArrayList<String>();
strList.add("hello");
String str1 = strList.get(0); // 不需要强制类型转换

示例二:使用 extends 通配符限定泛型类型的上限

public static double sum(List<? extends Number> list) {
    double sum = 0.0;
    for (Number n : list) {
        sum += n.doubleValue();
    }
    return sum;
}

List<Integer> intList = Arrays.asList(1, 2, 3);
double sum = sum(intList);

总结

Java 泛型是提高程序安全性和可读性的重要工具,需要熟练掌握泛型的声明与使用、通配符、泛型类和泛型方法等相关知识点。使用泛型能够提高代码的可维护性和可扩展性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你搞定JAVA泛型 - Python技术站

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

相关文章

  • 微信小程序向Java后台传输参数的方法实现

    如何实现微信小程序与Java后台之间的参数传递是一个较为重要且常见的问题。下面是一份完整的攻略,它包含了从前端到后端的全部知识点和示例。 前端实现 在微信小程序中传递参数的方法,与普通Web开发的方法类似。我们这里着重讲述以下两种方法: 参数以GET方式拼接在URL后传递 这是一种最常用的传参方法,它比较直观,易于理解和操作。GET方式传参的地址是一个完整的…

    Java 2023年5月23日
    00
  • UTF-8 Unicode Ansi 汉字GB2321几种编码转换程序

    UTF-8、Unicode、Ansi和汉字GB2312编码简介 编码是将字符转换成计算机可以处理的二进制数据的过程,常见的编码包括UTF-8、Unicode、Ansi和汉字GB2312等。在进行编码转换时,要先了解各个编码的特点及其间的差异。 UTF-8编码 UTF-8(Unicode Transformation Format-8-bit)是一种针对Uni…

    Java 2023年5月20日
    00
  • jsp利用echarts实现报表统计的实例

    让我为您详细讲解“jsp利用echarts实现报表统计的实例”的完整攻略。 1. 环境准备 运用 ECharts 前,需要先引入核心库文件 echarts.min.js。因此,我们需要进行以下操作:- 下载 ECharts:从 ECharts 官网(https://echarts.apache.org/zh/download.html)下载最新版 EChar…

    Java 2023年6月15日
    00
  • 什么是类加载器的双亲委派模型的实现原理?

    类加载器的双亲委派模型是Java虚拟机用于加载类的一种规范,它保证在Java中每个类都有且仅有一个类对象,从而保证Java程序的正确性和安全性。本文将详细讲解类加载器双亲委派模型的实现原理。 双亲委派模型的概述 在Java虚拟机中,每个类都有一个唯一的全限定名,类加载器加载一个类时需要先检查父加载器是否已经加载该类。如果父加载器没有加载该类,则它会使用自己的…

    Java 2023年5月10日
    00
  • Java程序开发环境配置图文教程

    下面我将为您讲解“Java程序开发环境配置图文教程”的完整攻略。 环境要求 在开始配置Java程序开发环境前,请确保您的电脑已经安装好了以下环境: 操作系统:Windows/macOS/Linux Java开发工具包(Java Development Kit,简称JDK) 集成开发环境(Integrated Development Environment,简…

    Java 2023年5月23日
    00
  • SpringMVC的源码解析

    SpringMVC的源码解析攻略 SpringMVC是Spring框架中一个重要的模块,具有在Web开发中的优秀表现,如显式的分层体系结构、松散耦合、组件重用、可配置性和可扩展性。通过对SpringMVC的源码进行深入学习,可以更好地理解SpringMVC框架的设计原理、底层实现和优化方法。 以下是SpringMVC源码解析的完整攻略。 1. SpringM…

    Java 2023年5月16日
    00
  • 教你开发脚手架集成Spring Boot Actuator监控的详细过程

    我会为您详细讲解开发脚手架集成Spring Boot Actuator监控的详细过程。 1. 什么是脚手架 脚手架(Scaffolding)是一种生成框架或代码骨架的工具,目的是让开发人员可以从简单的模板开始,集中精力编写业务逻辑和特定应用场景的代码。通过脚手架开发,可以极大地提高开发效率,并且在团队协作开发中更加便捷。 2. 为什么要集成Spring Bo…

    Java 2023年5月20日
    00
  • 深入了解MyBatis参数

    深入了解MyBatis参数 MyBatis是一款优秀的数据库持久化框架,在使用过程中主要涉及到参数的设置和传递。深入了解MyBatis参数对于提高MyBatis的性能和灵活性非常重要。 1. 参数的传递 MyBatis支持三种方式的参数传递: 1.1. 单个参数 单个参数是指只传递一个参数,使用最为简单。 Java代码 public interface Us…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部