当前位置:网站首页>2022-08-01 第五小组 顾祥全 学习笔记 day25-枚举与泛型
2022-08-01 第五小组 顾祥全 学习笔记 day25-枚举与泛型
2022-08-01 21:09:00 【激进的韭菜】
泛型与枚举
学习内容
枚举
枚举就是一个常量集合,规定某个类中的对象(枚举值) 个数(这个对象是被public static final修饰的),例如:季节(春/夏/秋/东)、星期(星期一到星期日)等
声明枚举
[修饰符列表] enum 枚举名 {类体}
阿里规约
【参考】枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
此处以声明SeasonEnum为例
package com.jsoft.enumdemo;
public enum SeasonEnum {
// 枚举对象 -----> 必须在类体最上面
SPRING(1,"春天"),
SUMMER(2,"夏天"),
AUTUMN(3,"秋天"),
WINTER(); // -----> 此处的“()”可以省略
// 构造器
SeasonEnum() {
}
SeasonEnum(int code, String name) {
this.code = code;
this.name = name;
}
// 属性
private int code;
private String name;
// Getter Setter
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
枚举类中枚举对象放必须在类体的最前面
枚举类中枚举对象(枚举值)都是被public static final修饰的,是常量,规范要求命名大写
枚举类中的枚举对象之间以",“分割,并且最后一个枚举对象以”;"结尾
枚举类中构造器都是私有的,并且可以省略“private”
枚举类中可以有Getter/Setter方法
枚举类中枚举对象如果是无参的可以省略“()”
上面的代码经过反编译后结果是这样的,可以看出
SPRING(1,“春天”);,–对应–> public static finalSeasonEnum SPRING = new (1,“春天”);
枚举的静态导入
import static 全类名.枚举对象名/通配符(*)
为什么要静态导入枚举? ——> 对枚举使用静态导入可以省略"枚举类.",直接使用枚举对象
package com.jsoft.enumdemo;
// 枚举的静态导入
import static com.jsoft.enumdemo.SeasonEnum.*;
public class Test {
public static void main(String[] args) {
SeasonEnum season1 = SeasonEnum.AUTUMN;
// 对枚举使用静态导入可以省略枚举类,直接使用枚举对象
SeasonEnum season2 = AUTUMN;
}
}
枚举的应用
枚举应用在switch分支中(java5新特性)
package com.jsoft.enumdemo;
import static com.jsoft.enumdemo.SeasonEnum.*;
public class Test {
public static void main(String[] args) {
SeasonEnum season = AUTUMN;
switch (season) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
default:
}
}
}
使用枚举类实现单例模式
待补充。。。
枚举值的比较
因为枚举类中都是常量(静态常量),所以对枚举进行等值比较时建议 使用“==”进行比较。
枚举的优势
对于有多种情况的选择时,我们可以使用int类型的常量也可以使用枚举,那么枚举相对int类型有什么优势呢?
- int类型不具备安全性。假如程序员在声明变量时手一哆嗦,少写了final,该变量会存在被他人修改的风险;而枚举类天然就是一个常量类,不存在失误的情况
- 使用int类型,语义不够明确。
泛型
- 什么是泛型(Generics)?
- 泛型能够帮助我们把[类型明确]的工作推迟到创建对象或调用方法的时候,
- 意思就是:我定义类的时候,不需要考虑这个数组到底要存什么类型。
- 创建这个超级数组对象的时候把里面要存的数据类型确定下来
- 在创建对象的时候没有指定泛型,默认T时Object类型
泛型的修饰:
- 泛型类
- 泛型方法
- 泛型接口
泛型类把泛型定义在类上,用户在使用类的时候才能把类型给确定
具体语法: “<未知数>”,通常用T K V等大写字母表示
泛型类
public class Test<T> {
public static void main(String[] argfs){
}
}
继承关系中的泛型
泛型类在继承时:
- 父类是一个泛型类,子类要不要是泛型类? 随便
- 泛型在声明时只能在当前类名后或方法返回值类型之前声明
- 在子类继承父类时,子类泛型和父类泛型都写出来的情况下,父跟子
- 如果在继承时,没有写出任何泛型,当前子类就不是泛型类
- 在继承关系中,如果需要,父类和子类都需要指定泛型
泛型方法
如果我们只关系某个方法,可以不定义泛型类,只定义泛型方法
泛型方法是不是一定要在泛型类里: 不是
泛型类中是不是一定要有泛型方法:不是
在定义泛型方法时,要首先定义泛型的类型
使用泛型方法,最好要结合返回值,否则和Object一样
定义在方法中间,修饰符列表之后,返回值类型之前
public class Test {
//声明泛型方法
public <T> T method(T t) {
return t;
}
public static void main(String[] args){
// 调用泛型方法,在传参的时候确定数据类型
String str = new Test().method("123");
}
}
泛型方法和泛型类
- 如果一个泛型类中,尽量不要在使用泛型方法
- 泛型方法多数都是出现在非泛型类中
静态泛型方法
- 静态方法如果时泛型方法,泛型的声明必须写
- 因为静态结构是属于类的,不属于某个对象那个
在Java7开始,可以省略等号右边的泛型的声明,<>必须得写(规范)
通配符
泛型中的通配符用"?"表示,
类型擦除
为了兼容性,使用原始类型(没有泛型)是可以的。
泛型刚刚出现的时候,还存在大量的不适用泛型的代码,
保证代码的兼容性,将参数化类型的实例传递给设计用于原始类型的方法必须
为例保持兼容性,Java泛型中,其实有一种类似伪泛型,因为Java在编译期间所有的泛型都会被擦掉
Java的泛型语法是在编译期这个维度上实现
正常来书在生成第字节码文件中,不包含泛型的类型信息的
在JVM中,由泛型附加的类型信息对JVM是看不到的
可以理解为,泛型的本质是让程序员在编写代码时遵守的一个规则
比如SuperArray: 在确定了泛型之后,这个超级数组就统一只放同一类型的数据,如果放入其他类型,编译不通过
泛型的应用场景
- 父类(接口),起到的是一个规范的作用,对里面的数据类型是没有明确要求的
- 容器类(超级数组,链表、队列、栈
- 当类型无法确定时,使用泛型
边栏推荐
- Review Set/Map basics with these two hooks
- pytest:开始使用
- 列表页常见的 hook 封装
- 附录A printf、varargs与stdarg A.2 使用varargs.h来实现可变参数列表
- R语言 线性回归的有关方法
- Graph adjacency matrix storage
- StringTable Detailed String Pool Performance Tuning String Concatenation
- 有点奇怪!访问目的网址,主机能容器却不行
- Pytorch学习记录(八):生成对抗网络GAN
- Excel advanced drawing techniques, 100 (22) - how to respectively the irregular data
猜你喜欢
关于Request复用的那点破事儿。研究明白了,给你汇报一下。
Jmeter实战 | 同用户重复并发多次抢红包
移植MQTT源码到STM32F407开发板上
有点奇怪!访问目的网址,主机能容器却不行
MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
测试的意义并不是能找到全部的缺陷
牛血清白蛋白刺槐豆胶壳聚糖缓释纳米微球/多西紫杉醇的纳米微球DTX-DHA-BSA-NPs
LeetCode·每日一题·1374.生成每种字符都是奇数个的字符串·模拟
C专家编程 第1章 C:穿越时空的迷雾 1.4 K&R C
【中文树库标记---CTB】
随机推荐
C pitfalls and pitfalls Chapter 7. Portability pitfalls 7.10 Free first, then realloc
Simple test of the use of iptables
使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性
1374. 生成每种字符都是奇数个的字符串 : 简单构造模拟题
Pytorch框架学校记录11——搭建小实战完整细节
附录A printf、varargs与stdarg A.3 stdarg.h ANSI版的varargs.h
C陷阱与缺陷 第8章 建议与答案 8.2 答案
Based on FPGA in any number of bytes (single-byte or multibyte) serial port (UART) to send (including source engineering)
织梦通过数据库查询调用当前文章的留言
C Pitfalls and pitfalls Appendix B Interview with Koenig and Moo
How to make the timer not execute when the page is minimized?
C陷阱与缺陷 第8章 建议与答案 8.1 建议
2022牛客多校联赛第五场 题解
【Kaggle】Classify Leaves
Protocol Buffer usage
WeChat applet cloud development | personal blog applet
网络安全与基础设施安全局(CISA):两国将在网络安全方面扩大合作
C专家编程 第1章 C:穿越时空的迷雾 1.4 K&R C
C陷阱与缺陷 第7章 可移植性缺陷 7.11 可移植性问题的一个例子
函数(二)