Java泛型在集合使用与自定义及继承上的体现和通配符的使用

Java泛型是Java SE 5的一项新特性,用于解决类型安全问题和减少代码重复。通过使用泛型,可以在编译时捕获类型错误,并实现代码复用的目的。泛型主要体现在集合使用、自定义及继承和通配符的使用上。

Java泛型在集合使用上的体现

Java集合框架中的泛型被广泛地应用于ArrayList、LinkedList、HashSet、HashMap等类中。具体体现如下:

ArrayList的泛型使用示例

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(3);
intList.add(4);
intList.add(5);
intList.add("six"); // 不能添加字符串类型,编译时就会报错

通过指定ArrayList的类型为Integer,我们保证了只能向ArrayList添加Integer类型的对象。试图向intList中添加一个字符串是非法的,编译时就会报错。

HashMap的泛型使用示例

HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
hashMap.put("one", 1);
hashMap.put("two", 2);
hashMap.put("three", 3);
hashMap.put("four", 4);
hashMap.put("five", 5);
hashMap.put("six", "6"); // 不能添加字符串类型,编译时就会报错

通过指定HashMap的类型为String和Integer,我们保证了只能向HashMap添加键为String,值为Integer类型的对象。试图向hashMap中添加一个键为字符串,值为字符串的元素是非法的,编译时就会报错。

Java泛型在自定义及继承上的体现

Java泛型不仅可以用于集合类,也可以用于自定义的类和其子类。具体体现如下:

class Box<T> {
    private T data;

    public Box(T data) {    // 构造函数
        this.data = data;
    }

    public T getData() {    // 获取数据
        return data;
    }

    public void setData(T data) {    // 设置数据
        this.data = data;
    }
}

class StringBox extends Box<String> {    // 子类继承父类时指定类型为String
    public StringBox(String data) {
        super(data);
    }
}

在自定义的Box类中,我们使用了泛型类型T,表示在Box的实例化中可以用任意类型替换T。通过继承Box类,在子类StringBox中指定了类型为String,达到了更严格的类型约束。如果在StringBox中尝试添加非String类型的元素,编译时就会报错。

Java泛型通配符的使用

泛型通配符用于表示泛型类中的某个类型,但又不确定具体是哪种类型。在Java中,泛型通配符用问号(?)表示。具体体现如下:

泛型通配符上界示例

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

List<? extends Number>表示list中的元素是Number的子类或Number类型,可以传入List、List等。在这个方法中,我们计算List中元素值的总和,但不知道List中元素的具体类型,因此使用了通配符。

泛型通配符下界示例

public static void addNumbers(List<? super Integer> list) {
    list.add(1);
    list.add(2);
    list.add(3);
}

List<? super Integer>表示list中的元素是Integer的超类,可以传入List、List、List等。在这个方法中,我们向List中添加整数,但不知道List中元素的具体类型,因此使用了通配符。

通过使用泛型通配符,我们可以更加灵活地处理泛型类型,使得我们能够在不知道具体类型的情况下进行类型安全的编程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java泛型在集合使用与自定义及继承上的体现和通配符的使用 - Python技术站

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

相关文章

  • Spring定时任务中@PostConstruct被多次执行异常的分析与解决

    下面我将给出详细的攻略,包括原因分析以及解决方法。 问题描述 在Spring定时任务中,如果使用了@PostConstruct注解,在任务执行过程中,有可能会出现@PostConstruct方法被多次执行的情况,这种情况会导致任务执行异常。 原因分析 这种情况的出现通常是由于Spring容器中的定时任务配置有误所导致。在Spring容器中,如果使用了多个定时…

    Java 2023年5月27日
    00
  • Java中synchronized正确使用方法解析

    Java中synchronized正确使用方法解析 什么是synchronized synchronized是一个对象级别的锁,也称之为内部锁或者特定对象的锁。Java中提供了三种使用synchronized关键字同步代码块的方法。 修饰实例方法,锁的是当前实例对象(this)。 修饰静态方法,锁的是类对象(Class对象)。 修饰代码块,锁的是代码块中的对…

    Java 2023年5月26日
    00
  • Java中Timer的用法详解

    Java中Timer的用法详解 什么是Timer? Timer是Java中的一个定时器工具类,可以用于在指定的时间间隔内重复执行某个任务,或执行单次任务。 Timer的基本用法 创建一个Timer对象 Timer timer = new Timer(); 定义需要重复执行的任务 TimerTask task = new TimerTask() { @Over…

    Java 2023年5月20日
    00
  • SpringBoot @GroupSequenceProvider注解实现bean多属性联合校验的示例代码

    校验是Web应用程序中的常见任务之一,Spring框架提供了很多方便的校验注解,如@NotNull、@Size等等。但是,在实际应用中,很少有只需要校验单一属性就能满足业务需求,通常需要校验多个属性组合而成的复杂条件。在这种情况下,Spring Boot的@GroupSequenceProvider注解可以派上用场。本文将为您介绍如何使用@GroupSequ…

    Java 2023年5月20日
    00
  • 老生常谈onBlur事件与onfocus事件(js)

    一、简介: onBlur事件和onfocus事件是JavaScript中关于input、textarea等表单元素的两种常见事件。其中onBlur事件当元素失去焦点时触发,而onfocus事件当元素获得焦点时触发。 二、具体使用方法: onfocus事件 :当元素获得焦点时触发,即当鼠标点击input或者textarea的时候,触发该事件。 示例代码: &l…

    Java 2023年6月15日
    00
  • Spring JDBCTemplate原理及使用实例

    Spring JDBCTemplate原理及使用实例 什么是JDBCTemplate? JDBCTemplate是Spring Framework的核心组件之一。它是一个提供基本JDBC操作的类,它封装了JDBC的许多重复和常见的任务,并且提供了一种更简单和更轻松使用的方式来与数据库进行交互。 JDBCTemplate的工作原理 JDBCTemplate将J…

    Java 2023年5月20日
    00
  • springboot的四种启动方式

    下面是关于Spring Boot的四种启动方式的详细攻略: 1. 命令行启动方式 在命令行中直接输入”java -jar”命令启动Spring Boot应用。在执行该命令时需要指定Jar包路径,例如: java -jar springboot-demo.jar 如果应用需要指定参数,可以在命令行中传入。 2. Maven插件启动方式 使用Spring Boo…

    Java 2023年5月15日
    00
  • 防止未登录用户操作—基于struts2拦截器的简单实现

    防止未登录用户操作是常见的Web应用程序的安全性需求之一。基于struts2拦截器可以方便地实现这一功能。接下来,我将详细讲解如何基于struts2拦截器实现防止未登录用户操作的功能。 步骤一:创建Session监听器 在Java Web应用程序中,每个会话都关联一个HTTP会话(Session)。Session监听器可以在会话开始和结束时执行操作,我们可以…

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