泛型-泛型入门

shadow-shine shadow-shine     2022-12-30     478

关键词:

一泛型的由来

    Java集合有个缺点,把一个对象"丢进"集合里之后,集合就会"忘记"这个对象的数据类型,当再次取出该对象时候,该对象的编译类型就变成了Object类型(其运行时类型没变)

    Java集合之所以这样是因为设计者不知道我们使用集合会保存些什么类型的对象,故设计成能保存任何类型.带来了很好的通用性,

    但带来了如下问题:

      1.集合对元素类型没有任何限制.Dog与Cat都能存进一个集合中,有时候不方便.

      2.将对象"丢进"集合中,集合丢失了对象的状态信息,集合只知道它转的是Object对象,因此取出集合元素之后需要进行强制类型转换,这增加了编程复杂度,也可能引发ClassCastException异常

二使用泛型

              Java5引入了"参数化类型"的概念,允许程序在创建集合时指定集合元素的类型,如List<String>,表明该List只能保存字符串类型的对象,Java的参数化类型被称为泛型(Generic)

      package com.j1803.genericOfUse;
      import java.util.ArrayList;
      import java.util.List;

      public class GenericList
           public static void main(String[] args)
             List<String> list=new ArrayList<String>();
                     list.add("book");
             list.add("think");
             list.add("Java");
                     //下面编译错误
                    //list.add(5)
                    for (String str : list)
                   System.out.println(str);
                      
              
         
      answer:book think Java

     list为一个特殊的List集合,它只能存储String对象,不能保存其他类型的对象,List<String>,也可以称为List是带一个参数类型的泛型接口,在本例中泛型参数为String,在创建ArrayList对象时也要指定一个参  数类型

     List中的数据在取出时候,也不需要进行强制类型转换,因为list可以"记住"它的所有集合元素都是String类型.

三Java9增强的"菱形"语法

     在Java7以前,如果使用带有泛型的接口,类定义变量,那么调用构造器创建对象时构造器的后面也必须带泛型,显得多余,如List<String>list =new ArrayList<String>(),

      Map<String,Integer>scores=new HashMap<String,Integer>();

    Java7之后可以改写成:

    List<String>list=new ArrayList<>(); Map<String,Integer>map=new HashMap<>().这种语法被称为"菱形"语法

  代码示例:

package com.j1803.genericOfUse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DiamondTest
    public static void main(String[] args)
        List<String>list=new ArrayList<>();
        list.add("Java");
        list.add("PhP");
        list.add("C++");
        Map<String,List<String>>map=new HashMap<>();
        map.put("开发语言", list);
        System.out.println(map.get("开发语言"));
    



 

  

 

  






































java入门-高级教程-03.泛型

...work100.net/training/java-generic.html更多教程:光束云-免费课程泛型序号文内章节视频1概述-2泛型方法-3泛型类-4类型通配符-请参照如上章节导航进行阅读1.概述Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检... 查看详情

java入门-高级教程-03.泛型

...work100.net/training/java-generic.html更多教程:光束云-免费课程泛型序号文内章节视频1概述2泛型方法3泛型类4类型通配符请参照如上章节导航进行阅读1.概述Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测... 查看详情

typescript入门-泛型

泛型要创建一个可重用的组件,其中的数据类型就必须要兼容很多的类型,那么如何兼容呢,TypeScript提供了一个很好的方法:泛型 HelloWorld要兼容多种数据格式,可能会有人想到any,即function identify(arg: any): any{ ... 查看详情

《c#零基础入门之百识百例》(八十二)泛型类型参数where约束--泛型单例

C#零基础入门泛型和系统类泛型类型参数Where约束--泛型单例前言一,类型参数约束1.1Where子句1.2约束类型和次序二,泛型方法2.1声明泛型方法2.2调用泛型方法三,实现泛型单例工具类3.1实现代码3.2使用代码前言本文属于C#零基础... 查看详情

《c#零基础入门之百识百例》(八十二)泛型类型参数where约束--泛型单例

C#零基础入门泛型和系统类泛型类型参数Where约束--泛型单例前言一,类型参数约束1.1Where子句1.2约束类型和次序二,泛型方法2.1声明泛型方法2.2调用泛型方法三,实现泛型单例工具类3.1实现代码3.2使用代码前言本文属于C#零基础... 查看详情

java入门系列泛型

前言     Java7泛型的“菱形”语法在JavaSE7之前,声明泛型对象的代码如下:List<String>list=newArrayList<String>();而在Java7中,可以使用如下代码:List<String>list=newArrayList<>();&nb 查看详情

scala入门到精通——第十六节泛型与注解

本节主要内容泛型(GenericType)简单介绍注解(Annotation)简单介绍注解经常使用场景1.泛型(GenericType)简单介绍泛型用于指定方法或类能够接受随意类型參数,參数在实际使用时才被确定,泛型能够有效地增强程序的适用性,使用... 查看详情

typescript入门14.泛型(代码片段)

泛型泛型是TypeScript非常重要和有趣的特性,它允许在定义函数、类或接口时使用类型参数,从而使这些定义可以适用于多种类型。通过使用泛型,我们可以编写更加通用和灵活的代码。我们可以使用尖括号<T>来表示一个类... 查看详情

快速入门系列--clr--03泛型集合

.NET中的泛型集合在这里主要介绍常见的泛型集合,很多时候其并发时的线程安全性常常令我们担忧。因而简述下.NET并发时线程安全特性,其详情请见MSDN。普通集合都不支持多重并发写操作部分支持单线程写和并发读操作同时.NE... 查看详情

c#学习笔记---基础入门

泛型<T>使用泛型能够最大限度的重用代码/保护类型安全,提高性能泛型成员因为类型的不确定性,不能使用算术运算符/比较运算符类型参数可以有多个,可以是编译器能够识别的任何类型类型参数的名字不能随便起,不能... 查看详情

泛型

上篇文章《大白话说Java泛型(一):入门、原理、使用》,我们讲了泛型的产生缘由以及其基本使用。但泛型还有更加复杂的应用,如:List<?extendsNumber>list=newArrayList();List<?superNumber>list=newArrayList();上面的extends和super关... 查看详情

scala入门系列(十三):类型参数

引言Scala中类型参数是什么呢?其实就类似于Java中的泛型。定义一种类型参数,比如在集合、类、函数中定义类型参数,然后就可以保证使用到该类型参数的地方就只能是这种类型,从而实现程序更好的健壮性。 泛型类泛... 查看详情

typescript入门手册之泛型(代码片段)

【Typescript入门手册】之泛型🚀【TypeScript入门手册】记录了出场率较高的Ts概念,旨在帮助大家了解并熟悉Ts🎉本系列会持续更新并更正,重点关照大家感兴趣的点,欢迎同学留言交流,在进阶之路上,... 查看详情

typescript入门手册之泛型(代码片段)

【Typescript入门手册】之泛型🚀【TypeScript入门手册】记录了出场率较高的Ts概念,旨在帮助大家了解并熟悉Ts🎉本系列会持续更新并更正,重点关照大家感兴趣的点,欢迎同学留言交流,在进阶之路上,... 查看详情

第9章泛型

第9章【泛型】泛型入门  编译时不检查类型的异常  使用泛型  Java7泛型的“菱形”语法深入泛型    定义泛型接口、类  从泛型派生子类  并不存在泛型类类型通配符  使用类型通配符  ... 查看详情

java零基础小白入门上手教程day15-泛型&file(代码片段)

day15_JAVAOOP课程目标1.【理解】什么是泛型2.【掌握】泛型的基本使用3.【理解】什么是Collections工具类4.【理解】什么是File类5.【掌握】File类的常用功能6.【掌握】打印多级目录案例7.【掌握】文件搜索案例泛型泛型概述​在前面... 查看详情

java零基础小白入门上手教程day15-泛型&file(代码片段)

day15_JAVAOOP课程目标1.【理解】什么是泛型2.【掌握】泛型的基本使用3.【理解】什么是Collections工具类4.【理解】什么是File类5.【掌握】File类的常用功能6.【掌握】打印多级目录案例7.【掌握】文件搜索案例泛型泛型概述​在前面... 查看详情

java零基础入门13:java中的泛型(代码片段)

...欢迎点赞👍收藏⭐留言📝目录一、基本介绍二、泛型的优点1、类型安全2、消除强制类型转换3、更高的效率4、潜在的性能收益四、常见泛型字母含义五、使用泛型时的注意事项六、泛型的使用1、泛型类一、基本介绍Java... 查看详情