当前位置: 首页 > news >正文

Java从入门到精通笔记篇(十二)

枚举类型与泛型

枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中

使用枚举类型设置常量

关键字为enum

枚举类型的常用方法

values()方法

枚举类型实例包含一个values()方法,该方法将枚举中所有的枚举值以数组的形式返回。

valueOf()可以将普通字符串转换为枚举类型

compareTo()方法用于比较两个枚举类型对象定义时的顺序。

枚举类型中的ordinal()方法用于获取某个枚举对象的位置索引值。

注意:

关于构造方法,在枚举类型中,无论是无参构造方法还是有参构造方法,修饰权限都为private。

泛型

泛型实质上就是使程序员定义安全的类型。

将基本类型向上转型或者是向下转型时,用错了类型,或者并没有执行该操作,就会出现异常,但由于语法不存在错误,因此可以被编译器接受,但在执行时会出现ClassCastException异常。

定义泛型

类名<T>

T是泛型的名称,代表某一种类型。如果不指定具体类型,T则采用Object类型。

在使用类中的方法传递或返回数据类型时将不再需要进行类型转换操作,而是使用在声明泛型类对象时“< >”符号中设置的数据类型。

在定义泛型类时,可以声明多个类型,在实例化指定类型的对象时就可以指定多个类型。

Class Myclass<T1,T2>{}

Myclass<Boolean,Float> m = new Myclass<Boolean,Float>()

定义泛型类时也可以声明数组类型,但注意不可以使用泛型来建立数组的实例。

使用泛型实例化常用集合类

泛型的高级用法

限制泛型可用类型

Class 类名称<T extends anyClass>

使用泛型限制后,泛型类的类型必须实现或继承anyClass这个接口或类,且必须使用extends关键字。例如下列的l1和l2是正确的,l3则不能。

当没有使用extends关键字限制泛型类型时,默认Object类下的所有子类都可以实例化泛型类对象。

使用类型通配符

作用是在创建一个泛型类对象时限制这个泛型类的类型实现或继承某个接口或类的子类。

泛型类名称<? extends List> a =null

还可以将该实例放置在方法的参数中。

Public void doSomething(A<? extends List> a){}

如果使用A<?>这种形式实例化泛型类对象,则默认表示可以将A指定为实例化Object及以下的子类类型。

“List<?> l2 = l1”语句与“List l2 = l1”语句存在何种本质区别?这里需要注意的是,对于使用通配符的对象不能向其中加入新的信息,只能从其中获取或删除信息。

泛型类型限制除了可以向下限制,还可以进行向上限制,只要在定义时使用super关键字即可。例如,像“A<? super List> a = null;”这样定义后,对象a只接受List接口或上层父类类型,如“a =new A<Object>();”。

定义为泛型的类和接口也可以被继承与实现。

如果在SubClass类继承ExtendClass类时保留父类的泛型类型,需要在继承时指明,如果没有指明,直接使用“extends ExtendsClass”进行继承操作,则SubClass类中的T1、T2和T3都会自动变为Object类型,所以在一般情况下都将父类的泛型类型进行保留。

泛型总结

泛型的类型参数只能是类类型,不可以是简单类型,如A<int>这种泛型定义就是错误的。

泛型的类型个数可以是多个。

可以使用extends关键字限制泛型的类型。

可以使用通配符限制泛型的类型

http://www.lryc.cn/news/482798.html

相关文章:

  • 入侵排查之Linux
  • 从0开始学习Linux——文件管理
  • 全面介绍软件安全测试分类,安全测试方法、安全防护技术、安全测试流程
  • Leidenアルゴリズムの詳細解説:Pythonによるネットワーク分割の実装
  • 安当ASP系统:适合中小企业的轻量级Radius认证服务器
  • Vue 组件间传值指南:Vue 组件通信的七种方法
  • 推荐一个超漂亮ui的网页应用设计
  • 有什么初学算法的书籍推荐?
  • 自动化工作流建设指南
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • SNK施努卡 - 机器人测温取样系统
  • goframe开发一个企业网站 验证码17
  • 【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
  • MySQL电商多级分类表设计方案对比
  • 网络安全工程师需要知道哪些IPSec的基本原理?
  • leetcode 148. 排序链表 中等
  • 动态规划与贪心算法:核心区别与实例分析
  • .NET 公共语言运行时(Common Language Runtime,CLR)
  • SpringBoot使用TraceId日志链路追踪
  • YOLO11 旋转目标检测 | OBB定向检测 | ONNX模型推理 | 旋转NMS
  • PCL 点云拟合 拟合空间直线
  • 我的创作纪念日-20241112-感谢困难
  • 苍穹外卖05-Redis相关知识点
  • unity 玩家和炸弹切线计算方式
  • 【MySQL】MySQL中的函数之REGEXP_LIKE
  • 跟着尚硅谷学vue2—进阶版4.0—Vuex1.0
  • 深度学习服务器租赁AutoDL
  • excel常用技能
  • Mac电脑中隐藏文件(即以 . 开头的文件/文件夹)的显示和隐藏的两种方法
  • 【Linux】:进程信号(信号概念 信号处理 信号产生)