Java泛型定义与用法入门示例

 更新时间:2019年08月01日 09:13:40   作者:cakincqm  
这篇文章主要介绍了Java泛型定义与用法,结合实例形式分析了java泛型的功能、定义、应用场景及相关使用注意事项,需要的朋友可以参考下

本文实例讲述了Java泛型定义与用法。分享给大家供大家参考,具体如下:

一 引入泛型背景

Java集合不会知道它们需要用它来保存什么类型的对象,所以他们把集合设计成能保存任何类型的对象,只要求具有很好的通用性。但这样做也带来两个问题:

  • 集合对元素类型没有任何限制,这样可能引发一些问题:例如想创建一个只能保存Dog对象的集合,但程序也可以轻易地将Cat对象“丢”进去,所以可能引发异常。
  • 由于把对象“丢进”集合时,集合丢失了对象的状态信息,集合只知道它盛装的是Object,因此取出集合元素后通常还需要进行强制类型转换。这种强制类型转换既会增加编程的复杂度、也可能引发ClassCastException。

二 不引入泛型的问题——编译时不检查类型的异常

1 代码

import java.util.*;
public class ListErr
{
  public static void main(String[] args)
  {
   // 创建一个只想保存字符串的List集合
   List strList = new ArrayList();
   strList.add("疯狂Java讲义");
   strList.add("疯狂Android讲义");
   // "不小心"把一个Integer对象"丢进"了集合
   strList.add(5);   // A处
   strList.forEach(str -> System.out.println(((String)str).length())); // B处
  }
}

2 运行

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
8
    at ListErr.lambda$main$0(ListErr.java:14)
11
    at java.util.ArrayList.forEach(ArrayList.java:1257)
    at ListErr.main(ListErr.java:14)

3 说明

程序在A处不小心把一个Integer对象“丢进”了List集合,这将导致程序在B处引发ClassCastException异常,因为程序试图把一个Integer对象转换为String类型。

三 引入泛型实战

1 代码

import java.util.*;
public class GenericList
{
  public static void main(String[] args)
  {
   // 创建一个只想保存字符串的List集合
   List<String> strList = new ArrayList<String>(); // ①
   strList.add("疯狂Java讲义");
   strList.add("疯狂Android讲义");
   // 下面代码将引起编译错误
   //strList.add(5);  // ②
   strList.forEach(str -> System.out.println(str.length())); // ③
  }
}

2 运行

8
11

3 说明

在集合中使用泛型后带来如下优势:

  • 程序再也不能“不小心”把其他对象“丢进”strList集合中,编译器会提示编译告警;
  • 程序更加简洁,集合自动记住所有集合元素的数据类型,从而无需对集合元素进行强制类型转换。

四 Java 7 泛型的菱形语法实战

1 代码

import java.util.*;
public class DiamondTest
{
  public static void main(String[] args)
  {
   // Java自动推断出ArrayList的<>里应该是String
   List<String> books = new ArrayList<>();
   books.add("疯狂Java讲义");
   books.add("疯狂Android讲义");
   // 遍历books集合,集合元素就是String类型
   books.forEach(ele -> System.out.println(ele.length()));
   // Java自动推断出HashMap的<>里应该是String , List<String>
   Map<String , List<String>> schoolsInfo = new HashMap<>();
   // Java自动推断出ArrayList的<>里应该是String
   List<String> schools = new ArrayList<>();
   schools.add("斜月三星洞");
   schools.add("西天取经路");
   schoolsInfo.put("孙悟空" , schools);
   // 遍历Map时,Map的key是String类型,value是List<String>类型
   schoolsInfo.forEach((key , value) -> System.out.println(key + "-->" + value));
  }
}

2 运行

8
11
孙悟空-->[斜月三星洞, 西天取经路]

3 说明

菱形语法对原有的泛型并没有改变,只是更好地简化了泛型编程。

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 全面解析java final关键字

    全面解析java final关键字

    这篇文章主要介绍了java final关键字的使用,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • spring中的@Value读取配置文件的细节处理过程

    spring中的@Value读取配置文件的细节处理过程

    这篇文章主要介绍了spring中的@Value读取配置文件的细节处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 每日六道java新手入门面试题,通往自由的道路第二天

    每日六道java新手入门面试题,通往自由的道路第二天

    这篇文章主要为大家分享了最有价值的6道java面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,对hashCode方法的设计、垃圾收集的堆和代进行剖析,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Java DOM4J方式生成XML的方法

    Java DOM4J方式生成XML的方法

    今天小编就为大家分享一篇Java DOM4J方式生成XML的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 实例详解Spring Boot实战之Redis缓存登录验证码

    实例详解Spring Boot实战之Redis缓存登录验证码

    本章简单介绍redis的配置及使用方法,本文示例代码在前面代码的基础上进行修改添加,实现了使用redis进行缓存验证码,以及校验验证码的过程。感兴趣的的朋友一起看看吧
    2017-08-08
  • Java实现图片裁剪功能的示例详解

    Java实现图片裁剪功能的示例详解

    这篇文章主要介绍了如何利用Java实现图片裁剪功能,可以将图片按照自定义尺寸进行裁剪,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-01-01
  • 解决spring data jpa 批量保存更新的问题

    解决spring data jpa 批量保存更新的问题

    这篇文章主要介绍了解决spring data jpa 批量保存更新的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java 内存安全问题的注意事项

    Java 内存安全问题的注意事项

    内存安全问题是每个程序员开发时都需要面对的问题,本文介绍了JVM管理内存的原理以及内存安全问题需要注意的地方,有此需求的朋友可以参考下本文
    2021-06-06
  • Java设计模式—观察者模式详解

    Java设计模式—观察者模式详解

    这篇文章主要介绍了Java设计模式—观察者模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java 向上转型和向下转型的详解

    Java 向上转型和向下转型的详解

    这篇文章主要介绍了 Java 向上转型和向下转型的详解的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论