news 2026/4/24 21:45:47

面向对象高级(枚举泛型)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面向对象高级(枚举泛型)

3.1 认识枚举

3.1.1 认识枚举、枚举的原理

枚举是一种特殊的类,它的格式是:

public enum 枚举类名{ 枚举项1,枚举项2,枚举项3; }

3.1.2 枚举深入

既然枚举是一个类的话,我们能不能在枚举类中定义构造器、成员变量、成员方法呢?

答案是可以的。来看一下代码吧

public enum A{ //定义枚举项 X,Y,Z("张三"); //枚举项后面加括号,就是在执行枚举类的带参数构造方法。 //定义空构造器 A(){ } //成员变量 private String name; //定义带参数构造器 A(String name){ this.name=name; } //成员方法 public String getName(){ return name; } ... }
public class Test{ public static void main(String[] args){ //获取枚举A类的,枚举项 A a1 = A.X; A a2 = A.Y; A a3 = A.Z; // 获取X当前的位置 System.out.println(a2.ordinal()); ​ // 获取Z后的字符串名称 System.out.println(a3.getName()); } }

虽然枚举类中可以像类一样,写一些类的其他成员,但是一般不会这么写,如果你真要这么干的话,到不如直接写普通类来的直接。

枚举类的特点: 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象。 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象。 枚举都是最终类,不可以被继承。 枚举类中,从第二行开始,可以定义类的其他各种成员。 编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法。

3.2 枚举的应用场景

枚举一般表示一组信息,然后作为参数进行传输。

这里我们就可以先定义一个枚举类,用来表示男生、或者女生

public class Constant{ BOY,GRIL }

再定义一个测试类,完成用户进入系统后的选择

public class Test{ public static void main(String[] args){ //调用方法,传递男生 provideInfo(Constant.BOY); } // 参数是根据用户选择的性别来进行判断 public static void provideInfo(Constant c){ switch(c){ case BOY: System.out.println("展示一些信息给男生看"); break; case GRIL: System.out.println("展示一些信息给女生看"); break; } } }

最终再总结一下枚举的应用场景:枚举一般表示几个固定的值,然后作为参数进行传输

总结:
1. 选择定义一个一个的常量来表示一组信息,并作为参数传输参数值不受约束。
2. 选择定义枚举表示一组信息,并作为参数传输代码可读性好,参数值得到了约束,对使用者更友好,建议使用!

泛型:

4.1 认识泛型

所谓泛型指的是,在定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>),称为泛型类、泛型接口、泛型方法、它们统称为泛型。

  • 泛型的好处:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。

  • 泛型的本质:把具体的数据类型传递给类型变量。

4.2 自定义泛型类

自定义泛型类的格式如下

//这里的<T,W>其实指的就是类型变量,可以是一个,也可以是多个。 修饰符 class 类名<类型变量, 类型变量>{ } 注意:类型变量建议用大写的英文字母,常用的有:E、T、K、V 等

4.3 自定义泛型接口

泛型接口其实指的是在接口中把不确定的数据类型用<类型变量>表示。定义格式如下:

//这里的类型变量,一般是一个字母,比如<E> 修饰符 interface 接口名<类型变量, 类型变量, ...>{ }
4.4 泛型方法

泛型方法的格式

修饰符 <泛型变量,泛型变量,...> 返回值类型 方法名(形参列表){ }

下图中在返回值类型和修饰符之间有<T>定义的才是泛型方法, 后边方法的E是用类的类型变量所以不是泛型方法。

4.5 泛型限定

泛型限定的意思是对泛型的数据类型进行范围的限制。有如下的三种格式

  • <?> 表示任意类型

  • <? extends 数据类型> 表示指定类型或者指定类型的子类

  • <? super 数据类型> 表示指定类型或者指定类型的父类

4.6 泛型擦除

也就是说泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。而且泛型只支持引用数据类型,不支持基本数据类型。

把下面的代码的字节码进行反编译看效果:

public class Test { public static void main(String[] args) { //泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。 ArrayList<String> list = new ArrayList<>(); list.add("柳岩"); list.add("宝强"); String name = list.get(0); System.out.println(name); ​ //泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。 // ArrayList<int> list = new ArrayList<>(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 2:07:13

别再只看RMS了!Zemax光学设计里,MTF曲线才是成像质量的‘照妖镜’

别再只看RMS了&#xff01;Zemax光学设计里&#xff0c;MTF曲线才是成像质量的‘照妖镜’ 在光学设计领域&#xff0c;许多工程师习惯性地将RMS波前误差作为评判系统性能的黄金标准。这种思维定式往往导致一个尴尬局面&#xff1a;明明仿真结果显示RMS值极低&#xff0c;实际成…

作者头像 李华
网站建设 2026/4/17 2:04:21

工业视觉中的图片拼接技巧:Halcon特征点匹配全流程详解

工业视觉中的图片拼接技巧&#xff1a;Halcon特征点匹配全流程详解 在工业自动化检测领域&#xff0c;图像拼接技术正成为提升检测精度和效率的关键手段。当面对大尺寸工件或需要高分辨率成像的场景时&#xff0c;单相机视野往往难以满足需求。这时&#xff0c;通过多幅局部图像…

作者头像 李华
网站建设 2026/4/17 2:03:20

如何在嘎嘎降AI中处理扫描版PDF论文:格式转换和处理教程

如何在嘎嘎降AI中处理扫描版PDF论文&#xff1a;格式转换和处理教程 第一次用降AI工具会遇到很多不确定的地方——传什么格式、选哪个模式、怎么验收效果。 这篇教程把常见问题都覆盖了&#xff0c;主要基于嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4…

作者头像 李华
网站建设 2026/4/17 2:00:19

从零推导:Dilated Convolution感受野的层叠计算法则

1. 从零理解膨胀卷积的核心概念 第一次接触膨胀卷积&#xff08;Dilated Convolution&#xff09;这个概念时&#xff0c;我和大多数初学者一样感到困惑——为什么要在卷积核里"挖洞"&#xff1f;这玩意儿到底有什么用&#xff1f;直到在复现那篇著名的《MULTI-SCALE…

作者头像 李华
网站建设 2026/4/17 2:00:18

Charles抓包工具实战:如何高效mock接口数据(一)

1. 为什么我们需要mock接口数据&#xff1f; 作为一个在接口开发领域摸爬滚打多年的老手&#xff0c;我见过太多因为接口数据问题导致的开发效率低下的案例。想象一下这样的场景&#xff1a;前端开发人员已经准备好了页面逻辑&#xff0c;但后端接口还在开发中&#xff1b;或者…

作者头像 李华