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

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中重写的抽象方法都走一遍

其实个人感觉,枚举中写抽象类,更多的用法就是为了根据传入的参数走一些不同的业务逻辑然后返回不同的返回值(返回值类型一样),由于我这是第一次接触这种写法,所以可能每个人的理解有所不同,如果说错了还请指出

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

相关文章:

  • 麒麟操作系统提示“默认密钥环已上锁”的解决办法
  • 云原生周刊:Docker 推出 Docker Debug | 2023.10.9
  • 设计模式 - 行为型模式考点篇:迭代器模式(概述 | 案例实现 | 优缺点 | 使用场景)
  • Spark任务优化分析
  • 最新数据库流行度最新排名(每月更新)
  • Python:如何在一个月内学会爬取大规模数据
  • K8S云计算系列-(4)
  • 【Mybatis源码】IDEA中Mybatis源码环境搭建
  • VUE如何使得大屏自适应的几种方法?
  • API接口安全运营研究(内附官方开发平台api接口接入方式)
  • 信钰证券:股票交易费用计算方法?
  • 通过js获取用户网络ip地址
  • 微信小程序wxml使用过滤器
  • 内网渗透面试问题
  • Go语言函数进阶:值传递、引用传递、函数式编程
  • 数据结构 堆——详细动画图解,形象理解
  • 使用pymodbus进行modbus-TCP通信
  • 2. redis常见数据类型
  • 多测师肖sir_高级金牌讲师_python之结构语句005
  • 用3-8译码器实现全减器
  • 招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本
  • Linux Centos7 下使用yum安装的nginx平滑升级
  • C/S架构学习之多线程实现TCP并发服务器
  • iPhone手机记笔记工具选择用哪个
  • MyBatis动态SQL(if、choose、when和otherwise)标签
  • idea将jar包deploy到本地仓库
  • 麻省理工学院与Meta AI共同开发StreamingLLM框架,实现语言模型无限处理长度
  • 记录 K8S 挂了的解决经过
  • Flink---11、状态管理(按键分区状态(值状态、列表状态、Map状态、归约状态、聚合状态)算子状态(列表状态、广播状态))
  • Vue3中使用tinymce全功能演示,包括开源功能