Java 枚举与泛型

合成孔径雷达Chirp Scaling(CS)算法MATLAB仿真实现 本人也是初学《合成孔径雷达成像算法与实现》,在GitHub上下载的关于CS算法的代码,仔细读了读,发现中间有一些不合理之处,动手改了一改,重新写了一个代码供初学者学习,有什么问题留言即可。 非常感谢源代码的作者,虽然中间有少许不正确的地方,但是对我理解cs算法的帮助非常大,非常感谢!!! 代码中提到的(4.31)这种均是在《合成孔径雷达成像算法与实现》中的公式 以下是MATLAB的仿真程序,直接复... 阅读详情

Java 枚举

之前写过的文档:https://blog.youkuaiyun.com/Roobert_Chao/article/details/78637972

枚举对象的常用方法

枚举对象的常用方法

Java 枚举的本质理解

Java 枚举的本质原理是通过普通类来实现的,经过编译器的加工处理(编译后生成的类是final class 类,且继承了 Enum 类),枚举值加工成为类的静态常量属性,其属性在类加载的静态代码块中被初始化实例赋值。
在这里插入图片描述
查看字节码(.class)文件

  1. 命令行的方式:javap -c 文件所在目录。
    在这里插入图片描述
  2. 使用插件工具 【IDEA】,添加插件 jclasslib bytecode viewer。
  3. 下载本地工具【JBE - Java Bytecode Editor】: http://set.ee/jbe/

上述枚举类型的编译后的代码如下:

public final class cn.chao.override.equals.ColorEnum extends java.lang.Enum<cn.chao.override.equals.ColorEnum> {    // 类变成了 final class 
  // 三种静态常量
  public static final cn.chao.override.equals.ColorEnum RED;
  public static final cn.chao.override.equals.ColorEnum BLUE;
  public static final cn.chao.override.equals.ColorEnum GREEN;
  // 自定义字符串类型的属性
  public java.lang.String color;

  static {};
    Code:
       0: new           #1                  // class cn/chao/override/equals/ColorEnum
       3: dup
       4: ldc           #16                 // String RED
       6: iconst_0
       7: ldc           #17                 // String red
       9: invokespecial #19                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;)V
      12: putstatic     #23                 // Field RED:Lcn/chao/override/equals/ColorEnum;
      15: new           #1                  // class cn/chao/override/equals/ColorEnum
      18: dup
      19: ldc           #25                 // String BLUE
      21: iconst_1
      22: ldc           #26                 // String blue
      24: invokespecial #19                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;)V
      27: putstatic     #28                 // Field BLUE:Lcn/chao/override/equals/ColorEnum;
      30: new           #1                  // class cn/chao/override/equals/ColorEnum
      33: dup
      34: ldc           #30                 // String GREEN
      36: iconst_2
      37: ldc           #31                 // String green
      39: invokespecial #19                 // Method "<init>":(Ljava/lang/String;ILjava/lang/String;)V
      42: putstatic     #33                 // Field GREEN:Lcn/chao/override/equals/ColorEnum;
      45: iconst_3
      46: anewarray     #1                  // class cn/chao/override/equals/ColorEnum
      49: dup
      50: iconst_0
      51: getstatic     #23                 // Field RED:Lcn/chao/override/equals/ColorEnum;
      54: aastore
      55: dup
      56: iconst_1
      57: getstatic     #28                 // Field BLUE:Lcn/chao/override/equals/ColorEnum;
      60: aastore
      61: dup
      62: iconst_2
      63: getstatic     #33                 // Field GREEN:Lcn/chao/override/equals/ColorEnum;
      66: aastore
      67: putstatic     #35                 // Field ENUM$VALUES:[Lcn/chao/override/equals/ColorEnum;
      70: return

  public static cn.chao.override.equals.ColorEnum[] values();
    Code:
       0: getstatic     #35                 // Field ENUM$VALUES:[Lcn/chao/override/equals/ColorEnum;
       3: dup
       4: astore_0
       5: iconst_0
       6: aload_0
       7: arraylength
       8: dup
       9: istore_1
      10: anewarray     #1                  // class cn/chao/override/equals/ColorEnum
      13: dup
      14: astore_2
      15: iconst_0
      16: iload_1
      17: invokestatic  #47                 // Method java/lang/System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
      20: aload_2
      21: areturn

  public static cn.chao.override.equals.ColorEnum valueOf(java.lang.String);
    Code:
       0: ldc           #1                  // class cn/chao/override/equals/ColorEnum
       2: aload_0
       3: invokestatic  #55                 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
       6: checkcast     #1                  // class cn/chao/override/equals/ColorEnum
       9: areturn
}

枚举类与常量类

在使用枚举类的时候,发现枚举常量+枚举值,和常量类中常量赋值是一样的。那么为什么会出现枚举类呢 ???

  1. 枚举相对于常量类来说更加的简单,可以不定义枚举值。而常量类中的每个常量必须要手动添加值。
  2. 枚举类自动具备内置方法(如 values 方法可以获得所有值的集合类遍历,ordinal 方法可以获得排序值,compareTo 方法可以基于 ordinal 比较)。常量类不具备这些方法。
  3. 枚举类编译后生成了 final class 类,且继承了 Enum 类(Java 单继承机制),所以枚举类不能够继承,但是定义的枚举类可以通过 implement 实现其他接口。

Java 枚举与线程安全

1. Java 类加载和初始化是 Java 虚拟机(JVM )保证线程安全。
2. static 的常量属性和代码块都是在类加载时初始化完成的。
Java 枚举类编译后的代码,实质上是一个 final 类,枚举常量初始化都是在 static 代码块中进行的,自然就 JVM 保证线程安全。

Java 泛型(参数化类型)

之前写过的文档:https://blog.youkuaiyun.com/Roobert_Chao/article/details/78634340
1. 参数化类型,泛型类、泛型接口、泛型方法。
2. 提高了代码的重用率,避免在运行时出现 ClassCastException。

Java 泛型是通过 擦除来实现的

  1. Java 泛型是通过擦除来实现的,所以编译后的任何具体泛型类型都被擦除了。
    (替换为非泛型上边界,没有上边界,则上边界就是 Object 类型。)

通过反射增加字符串

在这里插入图片描述
观察如下的代码:输出结果为
输出结果

public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
	ArrayList<Integer> list = new ArrayList<Integer>();
	list.add(1);
	list.getClass().getMethod("add", Object.class).invoke(list, "abc");
	for (int i = 0; i < list.size(); i++) {
		System.out.println(list.get(i));
	}
}

由于在程序中定义的 ArrayList 泛型类型实例化为 Integer 的对象,如果直接调用 add 方法则只能存储整型数据,不过当我们利用反射调用 add 方法时,就可以存储字符串。因为 Integer 泛型实例在编译之后被擦除了,只保留了原始类型 Object 。

  1. 擦除前的类型检查是针对引用的,用这个引用调用泛型方法就会对这个引用调用的方法进行类型检测而无关真正引用的对象。泛型中参数化类型不支持继承关系。且不能是基本类型。
    在这里插入图片描述
  2. 泛型无法进行具体泛型参数类型的运行时检查。而且不能抛出,也不能捕获泛型类对象。
arrayList instanceof ArrayList<String> 是非法的。
arrayList instanceof ArrayList<?> 仅这种方式。
  1. Java 的泛型数组不能采用具体的泛型类型进行初始化。只能通过通配符的形式。
建议:
List<?>[] list = new ListArray<?>[10];

在这里插入图片描述

【专栏导引贴】100+智能优化算法:从背景原理到代码实战(持续更新) 本专栏系统整理100+种现代优化算法,涵盖粒子群优化(PSO)、遗传算法(GA)、鲸鱼优化(WOA)等经典方法,以及白鲸优化(BWO)、非洲秃鹫优化(AVOA)等新兴算法。每篇详解包含生物启发原理、数学模型、代码实现及工程应用,采用统一编程风格,提供可直接运行的实例代码。专栏持续更新,旨在为研究者提供系统化的智能优化算法参考资料,实现从理论到实践的完整知识链。目前已收录23种算法,包括蚁群系统(ACS)、蝙蝠算法(BA)、天牛须搜索(BAS)等自然启发式优化方法。 阅读详情

相关推荐

NPU、CPU和GPU

NPU、CPU和GPU是三种不同类型的处理器,它们各自有不同的设计特点和应用场景。NPU(Neural Processing Unit,神经网络处理单元)是一种专门为加速神经网络计算而设计的处理器。

m0_60697583的博客 1755

枚举&&泛型

泛型类,在实际工作中一般都是源代码中写好,我们直接用的,就是ArrayList<E>这样的,自己定义泛型类是非常少的。自定义泛型类的格式如下//这里的<T,W>其实指的就是类型变量,可以是一个,也可以是多个。public class 类名<T,W>{接下来,我们自己定义一个MyArrayList<E>泛型类//定义一个泛型类,用来表示一个容器//容器中存储的数据,它的类型用<E>先代替用着,等调用者来确认<E>的具体类型。//定一个索引,方便对数组进行操作//添加元素index++

weixin_47878012的博客 956

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

本文设计并仿真了基于PID控制的四旋翼无人机系统。首先,建立了四旋翼无人机的数学模型,涵盖了无人机的动力学和控制系统。通过PID控制器对四旋翼的姿态和位置进行控制,以实现其稳定飞行。使用MATLAB/Simulink对该系统进行仿真,验证了PID控制算法在四旋翼控制中的有效性。仿真结果表明,PID控制能够较好地调节四旋翼的飞行姿态,并有效抑制外部干扰,使得无人机能够保持平稳飞行。

2401_84610415的博客 1804

java第十一章 枚举与泛型

11.1 枚举 枚举是一种数据类型,它是一系列具有名称的常量的集合。 11.1.1 使用枚举类型设置常量 定义常量的常用形式: public interface Contants { public static final int Constants_A=1; public static final int Constants_B=12; } ...

m0_61790579的博客 1892

SAP预扣税配置实战:从BP创建到外部接口集成的完整流程

本文详细拆解了SAP S/4HANA中预扣税配置与集成的完整实战流程。内容涵盖从业务伙伴(BP)架构下的数据存储理解、后台基础配置,到针对批量处理场景,如何绕过标准BAPI,采用直接更新核心表LFBW的策略进行高效开发。最后,文章探讨了与外部接口集成的多种模式与数据流设计,为财务顾问和ABAP开发人员提供了一套清晰、可落地的解决方案。

weixin_29204749的博客 415

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1004

Java编程学习笔记---枚举类型与泛型

Object类为最上层的父类,很多程序员为了使程序更为通用,设计程序时通常使传入的值与返回的值都以Object类型为主。当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则在运行时将会发生ClassCastException异常。为了提前预防这种问题,Java提供了泛型机制。类名<类型参数T, 类型参数T2, .... , 类型参数Tn>其中,T是泛型的名称,代表某一种类型。开发者在创建该类对象时需要指定T所代表哪种具体的类型。如果不指定具体类型,T则采用Object类型。

没技术的博客 940

Python爬虫实战:美团外卖商家数据抓取与分析

随着互联网技术的快速发展,外卖平台已成为人们日常生活中不可或缺的一部分。本文基于Python爬虫技术,使用最新的异步爬虫框架和反爬虫绕过技术,实现了对美团外卖平台商家信息与评分数据的自动化抓取。通过对抓取数据的清洗、存储和分析,为餐饮行业市场研究和商业决策提供数据支持。本文详细介绍了爬虫的设计思路、技术实现方案、数据处理方法以及可视化分析结果,为相关领域的研究者和开发者提供参考。关键词:Python爬虫;美团外卖;数据抓取;数据分析;异步爬虫。

2201_76125261的博客 1822

第11章 枚举与泛型

目录 1枚举 11.1.1使用枚举类型设置常量 例11.1在项目创建Constants接口,在该接口中定义两个整数变量,其修饰都是static和final;之后定义名称为 } public class ConstantsTest { enum Constants2{//将常量放置在枚举类型中 Contanst_A,Constants_B_ } public static void doit(int c) {//定义一个方法,这里的参数为int型 switch(c) {//根据常...

m0_65491494的博客 717

手把手教你学Simulink——高频隔离型双向DC-AC逆变器的建模与仿真

本文系统讲解高频隔离型双向DC-AC逆变器的Simulink建模与仿真,基于DAB+全桥逆变两级拓扑,详述DAB移相控制原理、双闭环控制策略及分步仿真搭建流程。重点涵盖电路建模、控制环设计、参数设置与常见问题调试,强调模块化分步验证与分层控制逻辑,实现安全、高效、灵活的双向能量流动仿真,适用于储能、微电网等场景的系统开发与验证。

MHD0815的博客 107

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen‘s Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

【机器学习|评价指标8】混淆矩阵(Confusion Matrix)、Cohen's Kappa 系数、详解,平均交并比(mIoU)、列联表(Contingency Table)附代码。

2401_89898861的博客 1426

java学习4---枚举类型与泛型

枚举类型是将常量封装在类或接口中,本质上还是以类的形式存在。泛型可以减少代码量,还不会因为对象置于某个容器中而失去其类型。 1.枚举类型 ①使用枚举类型设置常量 常量一般放在接口,便于使用,且在接口中使用final或static关键字修饰。 而泛型的出现逐渐取代了该方式,泛型定义常量语法: 接口定义与泛型定义区别: ...

qq_62006367的博客 1420

手把手教你学Simulink——基于Simulink的多轮PMSM同步驱动交叉耦合控制

摘要:本文针对多轮PMSM同步驱动系统的负载不均、参数差异等问题,提出基于Simulink的交叉耦合控制解决方案。通过实时补偿轮间同步误差,实现同步误差<1%、转矩脉动<5%的性能提升。文章详细介绍了系统架构、核心算法(包括PMSM数学模型和偏差耦合控制算法)、Simulink建模步骤及参数设置,并通过仿真验证了稳态和动态性能。同时提供了工程调试建议和完整代码实现,为多轮驱动系统开发提供实用参考。该方案计算量小,可移植性强,适用于电动汽车、AGV等应用场景。

MHD0815的博客 140

Java泛型和枚举

Java泛型和枚举

qq_52215881的博客 1317

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java泛型,枚举,注解

Java基础7(泛型,枚举,注解) 1 泛型 1.1 什么是泛型 泛型:即参数化类型。在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。 解决集合中的两个问题:(1)元素存储的安全问题(添加元素时,检查添加元素的类型);(2)元素的类型装换问题 泛型可以起到对类的限定作用。 1.2...

fighting 1056

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java枚举与泛型

java枚举 解释:枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女或者人妖”,一天只能有24小时等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代。而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。 声明枚举 声明枚举时必须使用 enum 关键字,然后定义枚举的名称、可访问性、基础类型和成员等。枚举声明的语法如下: enum-mod

抚琴 1398

Java枚举与泛型

枚举介绍操作枚举类型成员的方法枚举类型中的构造方法 介绍 继承java.lang.Enum 枚举类型可以取代常量的定义方式,即将常量封装在类或接口中。本质上还是类的形式。 单独定义枚举 使用方法: 枚举名.常量名 Constants.Constants_A; 类中定义枚举 这种内部类的形式,编译改类时,除了ConstantsTest.class类之外,还存在ConstantsTest $ 1.class和ConstantsTest $ Constants2.class 文件。 操作枚举类型成员

weixin_44949462的博客 686

java 枚举与泛型_Java中枚举和泛型用法

文章目录枚举类型使用枚举类型设置常量深入了解枚举类型操作枚举类型成员的方法枚举类型中构造方法泛型定义泛型类泛型的常规用法泛型的高级用法枚举类型使用枚举类型设置常量public class ConstantsTest {enum Constants2 { // 将常量放置在枚举类型中Constants_A, Constants_B}// 定义一个方法,这里的参数为枚举类型对象public stati...

weixin_30100299的博客 1044

java 泛型 枚举_详解Java中的 枚举与泛型

详解Java中的 枚举与泛型一:首先从枚举开始说起枚举类型是JDK5.0的新特征。Sun引进了一个全新的关键字enum来定义一个枚举类。下面就是一个典型枚举类型的定义:public enum Color{RED,BLUE,BLACK,YELLOW,GREEN}显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类。 而这些类都是类库中Enum类的子类(Java.lang.Enu...

weixin_36131079的博客 481

java 泛型不能用枚举

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnN理解 Java 泛型与枚举的关系 在 Java 编程中,泛型是一种强大的功能,它允许开发者在类、接口和方法中定义与特定数据类型无关的类型安全逻辑。然而,处理泛型时,你可能会发现 Java ...

weixin_40188886的博客 126

java枚举,泛型学习

java枚举 public enum seasons2 { SPRING,SUMMER,WINTER,AUTUMN } /* * 以下两种方法都可以创建枚举对象,显然第二种方法要好过于第一种方法,避免了抛出空枚举异常,导致程序编译通过而运行出错。 */ public class 枚举对象创建 { public static void main(String[] args) { se...

baldicoot_的博客 203

Java中的泛型和枚举

泛型和枚举都是JDK1.5版本之后加入的新特性,泛型将程序代码的类型检查提前到了编译期间进行,枚举类型增强了程序代码的健壮性。 1. 泛型 在JDK1.5版本之前,如果在集合中添加了不同类型的数据,需要在程序的运行期间对类型之间的转换进行检查。 例如: List arrayList=new arrayList(); 在arrayList中添加String类型的对象和Integer对象,但

海瑞@mt 3927

java 泛型枚举_java枚举泛型

有!泛型和枚举都是JDK1.5版本之后加入的新特性,泛型将程序代码的类型检查提前到了编译期间进行,枚举类型增强了程序代码的健壮性。1. 泛型在JDK1.5版本之前,如果在集合中添加了不同类型的数据,需要在程序的运行期间对类型之间的转换进行检查。例如:List arrayList=new arrayList();在arrayList中添加String类型的对象和Integer对象,但是我们定义如下一...

weixin_39580042的博客 914

java 泛型 枚举_Java中的枚举与泛型

本周初步认识了下java中的枚举与泛型。先来说一下枚举:java语言中由关键字enum来定义一个枚举类型。枚举的特点是有限且固定的类,枚举类是再JDK1.5版本中才引入的,存放在java.lang包中。枚举类型语法:修饰符 enum 枚举类型名称{常量1,常量2,.....常量n;}其中enum声明为枚举类型,程序体定义常量,当需要使用该常量时,可以用“类名.常量”来表示。下面是枚举类型的一些常用...

weixin_35891825的博客 354

JAVA高级编程之泛型&枚举

泛型 泛型是JDK5的新特性;泛型指广泛的类型,即类型参数化; 泛型擦除: 泛型只存在编译期,运行期就会消失; 泛型类: 定义:在定义类的时候在类名后面直接使用 < T > 形式指定泛型; 当子类继承一个泛型父类时,如果子类不是泛型类,则需要明确父类上的泛型参数;如果在子类继承泛 型父类时没有给父类指定泛型参数,则需要将子类也定义成泛型类,并且子类的泛型参数变量名要和父类 保...

zy 224

Java中泛型与枚举

一、  java中的泛型:泛型的主要作用是使得一个集合(要明确主要是对于集合)只能存放一个同一类型的数据(包括引用类型和基本数据类型)。这样就可以避免同一集合中出现不同元素,导致我们无法用同一样的方法来处理这些数据。来,我们来看代码。public class Testaa {@Testpublic  void iii() { DAO &lt;User&gt; dao =new DAO &lt;Us...

moutain0101的博客 840

49天精通Java(Day 14):泛型与枚举

🏆本文收录于专栏,专业攻坚指数级提升持续更新中,up!up!up!!

**My Coding Family** 1367
上一篇: Java 中的 equals 与 hashCode
下一篇: Java 编程技巧
Roobert_Chao
博客等级 码龄9年 89粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值