java枚举中写抽象方法
之前写java枚举时,都是中规中矩的写,从来没见过在枚举中写抽象方法的,但最近换了新公司,接手了新项目,发现枚举中竟然写了抽象方法,由于之前没接触过这种写法,所以这里记录下
实体类student代码
@Data
@AllArgsConstructor
@NoArgsConstructor
//这里就直接用lombok的注解去实现get、set、构造函数了
public class Student {String name;Integer age;String idcardNumber;Boolean sex;String height;}
枚举类
/*** 定义一个Student枚举,当Student中的字段不为空时,返回各个字段的value*/
public enum StudentEnum {NAME("学生姓名") {@Overridepublic String resStudentFieldValue(Student student) {if (StringUtils.isNotEmpty(student.getName())){return student.getName();}return null;}},AGE("学生年龄") {@Overridepublic String resStudentFieldValue(Student student) {if (student.getAge() != null){return student.getAge().toString();}return null;}},IDCARDNUMBER("学生身份证号") {@Overridepublic String resStudentFieldValue(Student student) {if (StringUtils.isNotEmpty(student.getIdcardNumber())){return student.getIdcardNumber();}return null;}},SEX("学生性别") {@Overridepublic String resStudentFieldValue(Student student) {if (student.getSex() != null){return student.getSex()? "男":"女";}return null;}},HEIGHT("学生身高") {@Overridepublic String resStudentFieldValue(Student student) {if (StringUtils.isNotEmpty(student.getHeight())){return student.getHeight();}return null;}};private String desc;StudentEnum(String desc) {this.desc = desc;}//返回student对象中的属性值public abstract String resStudentFieldValue(Student student);
}
测试main函数
public class TestMain {public static void main(String[] args) {Student student = new Student("张三", 22, "110101199604280816", true, "176cm");//student.setAge(null);List<String> collect = Arrays.stream(StudentEnum.values()).map(e -> e.resStudentFieldValue(student)).filter(StringUtils::isNotEmpty).collect(Collectors.toList());System.out.println("学生的详细信息为:"+collect.toString());/*** 如果注释了student.setAge(null),* 打印的结果:学生的详细信息为:[张三, 22, 110101199604280816, 男, 176cm]*//*** 如果没注释student.setAge(null),* 打印的结果:学生的详细信息为:[张三, 110101199604280816, 男, 176cm]*/}
}
从上面的demo中可以看出,student枚举中有多个类型(NAME、AGE、IDCARDNUMBER。。。),然后又定义了一个抽象方法,具体作用是要返回student实体的每个相对应的属性value,所以在NAME、AGE。。。中要实现这个抽象方法并写具体的业务逻辑,具体使用时就是传入一个student对象,然后枚举中每个value中重写的抽象方法都走一遍
其实个人感觉,枚举中写抽象类,更多的用法就是为了根据传入的参数走一些不同的业务逻辑然后返回不同的返回值(返回值类型一样),由于我这是第一次接触这种写法,所以可能每个人的理解有所不同,如果说错了还请指出
相关文章:
java枚举中写抽象方法
之前写java枚举时,都是中规中矩的写,从来没见过在枚举中写抽象方法的,但最近换了新公司,接手了新项目,发现枚举中竟然写了抽象方法,由于之前没接触过这种写法,所以这里记录下 实体类student代码…...
麒麟操作系统提示“默认密钥环已上锁”的解决办法
在国产麒麟操作系统上,有的时候不知道为啥,打开vscode或者其他应用软件时,总是提示“密钥环已上锁”,该怎么处理呢? 需要点击“开始”,在搜索框中输入“password” 点击打开“密码和密钥”,看到如下图。 然后点击左上角的箭头,回退,打开如下图:...
云原生周刊:Docker 推出 Docker Debug | 2023.10.9
开源项目推荐 SchemaHero SchemaHero 是一个 Kubernetes Operator,用于各种数据库的声明式架构管理。SchemaHero 有以下目标: 数据库表模式可以表示为可以部署到集群的 Kubernetes 资源。可以编辑数据库模式并将其部署到集群。SchemaHero 将计算所需的…...
设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)
目录 一、行为型模式 一句话概括行为型模式 1.1、迭代器模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 一句话概括行为型模式 行为型模式:类或对象间如何交互、如何划分职责,从而更好的完成任务. 1.1、迭代器…...
Spark任务优化分析
一、背景 首先需要掌握 Spark DAG、stage、task的相关概念 Spark的job、stage和task的机制论述 - 知乎 task数量和rdd 分区数相关 二、任务慢的原因分析 找到运行时间比较长的stage 再进去看里面的task 可以看到某个task 读取的数据量明显比其他task 较大。 如果是sql 任…...
最新数据库流行度最新排名(每月更新)
2023年10月数据库流行度最新排名 TOP DB顶级数据库索引是通过分析在谷歌上搜索数据库名称的频率来创建的 一个数据库被搜索的次数越多,这个数据库就被认为越受欢迎。这是一个领先指标。原始数据来自谷歌Trends 如果您相信集体智慧,那么TOP DB索引可以帮…...
Python:如何在一个月内学会爬取大规模数据
Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫、学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得…...
K8S云计算系列-(4)
K8s Dashboard UI 部署实操 Kubernetes实现的最重要的工作是对Docker容器集群统一的管理和调度,通常使用命令行来操作Kubernetes集群及各个节点,命令行操作非常不方便,如果使用UI界面来可视化操作,会更加方便的管理和维护。如下为…...
【Mybatis源码】IDEA中Mybatis源码环境搭建
一、Mybatis源码源 在github中找到Mybatis源码地址:https://github.com/mybatis/mybatis-3 找到Mybatis git地址 二、IDEA导入Mybatis源码 点击Clone下载Mybatis源码 三、选择Mybatis分支 选择Mybatis分支,这里我选择的是3.4.x分支...
VUE如何使得大屏自适应的几种方法?
VUE学习大屏自适应的几种方法 1.自适屏幕,始终保持16:9的比例 <!-- 大屏固定比例16:9自适应 --> <template><div class"container"><div class"content" :style"getAspectRatioStyle"><!-- …...
API接口安全运营研究(内附官方开发平台api接口接入方式)
摘 要 根据当前API技术发展的趋势,从实际应用中发生的安全事件出发,分析并讨论相关API安全运营问题。从风险角度阐述了API接口安全存在的问题,探讨了API检测技术在安全运营中起到的作用,同时针对API安全运营实践,提出…...
信钰证券:股票交易费用计算方法?
股票生意是股市参加者之间进行的买入和卖出股票的进程。其中,股票生意费用是参加股市生意的重要组成部分。本文将从多个视点分析股票生意费用计算方法。 首先,股票生意费用一般包含三部分。分别是佣钱、印花税和过户费。佣钱是证券公司为代理股票生意而收…...
通过js获取用户网络ip地址
<!DOCTYPE html> <html><head><meta charset"utf-8"><title>js获取本地ip</title> </head><body><script>var xmlhttp;if (window.XMLHttpRequest) {xmlhttp new XMLHttpRequest();} else {xmlhttp new Act…...
微信小程序wxml使用过滤器
微信小程序wxml使用过滤器 1. 新建wxs2. 引用和使用 如何在微信小程序wxml使用过滤器? 犹如Angular使用pipe管道这样子方便,用的最多就是时间格式化。 下面是实现时间格式化的方法和步骤: 1. 新建wxs 插入代码: /*** 管道过滤工…...
内网渗透面试问题
文章目录 1、熟悉哪些域渗透的手段2、详细说明哈希传递的攻击原理NTLM认证流程哈希传递 3、聊一下黄金票据和白银票据4、shiro反序列化漏洞的形成原因,尝试使用burp抓包查看返回包内容安装环境漏洞验证 5、log4j组件的命令执行漏洞是如何造成的6、画图描述Kerberos协…...
Go语言函数进阶:值传递、引用传递、函数式编程
文章目录 值传递和引用传递闭包柯里化defer go语言教程: 安装入门➡️ for循环➡️ 数组、切片和指针➡️ switch和map 值传递和引用传递 go语言中,函数通过关键字func定义,对于传入和返回的参数需要做类型的定义,其返回值可…...
数据结构 堆——详细动画图解,形象理解
作者主页 📚lovewold少个r博客主页 ➡️栈和队列博客传送门 🌳参天大树充满生命力,其根深叶茂,分枝扶疏,为我们展示了数据分治的生动形态 目录 🌳 树 树的常见概念 📒树的表示 二叉树 一…...
使用pymodbus进行modbus-TCP通信
模拟modbus-slave 创建slave 设置 完成 安装pymodbus pip3 install pymodbus2.5.3代码 from pymodbus.client.sync import ModbusTcpClient from pymodbus.bit_read_message import ReadCoilsResponse from pymodbus.register_read_message import ReadInputRegistersRe…...
2. redis常见数据类型
一、Redis 数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合…...
多测师肖sir_高级金牌讲师_python之结构语句005
python中常见语句: 一、目录: 1、if语句 2、while 循环语句 3、for循环语句 4、continue 语句 5、break 语句 二、语句详解 1、if判断语句 (1)if单分支 格式:if 判断条件: 语句块1…… else: 语…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
