首页 > Java 理解泛型的基本含义

Java 理解泛型的基本含义

Java 泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

 


泛型方法

你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

下面是定义泛型方法的规则:

  • 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。
  • 每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
  • 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
  • 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)。

实例:

public class ElementDemo {public static void main(String[] args) {//运行时类型//使用泛型后,如果实例化是定义的类型与对象传入的类型不一致,就会在编译时期报错。Test t1 = new Test<>();t1.add(666); Test t2 = new Test<>();t2.add("cjj");}
}/*** "E" 在这里并没有实际意义,你也可以用别的字母代替* 它的作用就是在实例化Test类的时候,传入什么类型它就调用什么类型*/
class Test{public void add(E e) {System.out.println(e);}
}

注意:

泛型的命名只要符合标识符的命名规则即可

习惯上泛型一般只使用一个大写字母进行命名

    type

     element 元素类型

     key

     value

     result/return

泛型向下兼容

import java.util.ArrayList;
import java.util.List;public class ElementDemo {public static void main(String[] args) {//实例化一个Integer类型的数组列表对象,里面存储的数据都是int型数据List in = new ArrayList<>();in.add(1);in.add(2);in.add(3);in.add(4);in.add(5);in.add(6);//实例化一个Double类型的数组列表对象,里面存储的数据都是Double类型的List dos = new ArrayList<>();dos.add(3.6);dos.add(4.2);dos.add(6.8);dos.add(7.7);dos.add(0.2);//调用方法
        print(in);print(dos);}// 写一个新的方法来遍历元素类型是数字的列表// 元素类型是Number或者是其子类// ? extends 类/接口 表示传入这个类/接口或者是其子类/子接口对象// 所能传入的元素的最大类型限定为Number// 规定了泛型的上限public static void print(Listextends Number> list) {//在方法体里面不能再往对象里添加元素,null除外list.add(null);//打印对象里面的元素
        System.out.println(list);}
}

向上造型规定了泛型的上限,上限的子类都可以向泛型方法传入对象。

泛型向下兼容

import java.util.ArrayList;
import java.util.List;public class ElementDemo1 {public static void main(String[] args) {List str = new ArrayList<>();str.add(0, "cjj");print(str);}// 泛型的下限// 传入元素类型是String及其父类的列表// ? super 类/接口 表示传入这个类/接口及其父类/父接口的对象// 表示传入的最小类型是String    public static void print(Listsuper String> list) {//方法体里面可以添加元素list.add("add");for(Object o : list){System.out.println(o);}}
}

向上造型规定了泛型的下限,下限的fu类都可以向泛型方法传入对象。

 

转载于:https://www.cnblogs.com/chuijingjing/p/9509367.html

更多相关:

  • Python 与 ABC 的一个重要区别在于其类型系统。ABC 采用静态类型,编译器会检查程序中的变量类型是否保持一致,如果不一致,程序就无法运行。并且,ABC与当时大多数静态语言不同,采用的是类型推导(和 Haskell 一样),而不是类型声明(比如 C 语言)。而 Python 采用动态类型,所有类型检查都是在程序运行过程中,而不...

  • python是计算机二级考试的科目之一,并没有级别的划分。其考试目标是测试考生掌握Python语言知识的程度和对Python语言的编程能力、调试能力和综合应用能力,在当下的应用中是十分重要的。 什么是python Python语言是一种解释运行、面向对象、扩展性强的程序设计语言,是大学生学习计算机编程能力、理解计算机解决问题的方法的...

  • 正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1)空指针所对应的是指指向的对象为空的指针。            不经发问,什么叫指向为空呢?要理解这点,必须理解如下几点(有点啰嗦,但...

  • 一、reponseType 1、什么是reponseType XMLHttpRequest.reponseType属性是一个枚举类型的属性,返回响应数据的类型,他允许我们手动的设置 返回数据的类型。如果我们将它设置为一个空字符串,它将默认的使用"text"类型。 当将reponseType设置为一个特定的类型的时候需要确保服务...

  • SNMP中,数据类型并不多。这里我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。INTEGER一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志就只有允许转发时的或者不允许转发时的这两种),有些整型变量定义一个特定的范围(例如,UDP和TCP的端口号...

  • Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a generic array of T,初学泛型时,看到这个错就以为Java中不能创建泛型数组,随着不断的深入,当看到Tinking in J...

  • 1.带有【超类型限定 super】的通配符可以向泛型对象写入,带有【子类型限定 extends】的通配符可以从泛型对象读取,反之则不然。 转载于:https://www.cnblogs.com/baokang/p/7441122.html...

  • 来源:公众号|计算机视觉工坊(系投稿)作者:仲夏夜之星「3D视觉工坊」技术交流群已经成立,目前大约有12000人,方向主要涉及3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、...

  • 点云PCL免费知识星球,点云论文速读。文章:Real-Time LIDAR-Based Urban Road and Sidewalk Detection for Autonomous Vehicles作者:Ern˝o Horváth  , Claudiu Pozna ,and Miklós Unger编译:点云PCL代码:http...

  • 文章:Semantic Histogram Based Graph Matching for Real-Time Multi-Robot Global Localization in Large Scale Environment作者:Xiyue Guo, Junjie Hu, Junfeng Chen, Fuqin Deng, T...

  • 点云PCL免费知识星球,点云论文速读。文章:Robust Place Recognition using an Imaging Lidar作者:Tixiao Shan, Brendan Englot, Fabio Duarte, Carlo Ratti, and Daniela Rus编译:点云PCL(ICRA 2021)开源代码:...

  • 文章:A Survey of Calibration Methods for Optical See-Through Head-Mounted Displays作者:Jens Grubert , Yuta Itoh, Kenneth Moser编译:点云PCL本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PD...