枚举,注解 ,反射

本文涉及的产品
语种识别,语种识别 100万字符
文档翻译,文档翻译 1千页
图片翻译,图片翻译 100张
简介: 枚举,注解 ,反射
package com.itep.mt.common.annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamField{
  int    sort()   default 0;           //字段排序
  int    len()    default 0;           //报文长度
  LenType lenType() default LenType.FIXED; //长度类型
  Charset charset() default Charset.DYNAMIC;
  Encode encode() default Encode.ASC;  //编码格式
  public enum Encode{
    ASC,   //ASCII编码
    BCD,   //二进码十进数
    HEX    //十六进制码
  }
  public enum Charset{
    GBK("GBK"),   //GBK
    UTF_8("UTF-8"),   //UTF_8
    DYNAMIC("dynamic");   //动态编码
    private String charset;
    private Charset(String charset) {
      this.charset=charset;
    }
    public String value() {
      return this.charset;
    }
  }
  public enum LenType{
    FIXED,   //固定
    DYNAMIC    //动态
  }
}

package com.itep.mt.infoviewer.dto;
import com.itep.mt.common.annotation.ParamField;
import com.itep.mt.common.dto.BaseDTO;
/**
 * Created by xianghui on 2019/9/12.
 */
public class PDFSign2DTO extends BaseDTO {
    /**
     * pdf的签字页,从0开始
     */
    @ParamField(sort = 0, len = 1, encode = ParamField.Encode.BCD)
    private int page;
    /**
     * X:pdf的签字位置
     */
    @ParamField(sort = 1, len = 2, encode = ParamField.Encode.BCD)
    private int x;
    /**
     * Y:pdf的签字位置
     */
    @ParamField(sort = 2, len = 2, encode = ParamField.Encode.BCD)
    private int y;
    /**
     * W:pdf的签字区域宽度
     */
    @ParamField(sort = 3, len = 2, encode = ParamField.Encode.BCD)
    private int w;
    /**
     * H:pdf的签字区域高度
     */
    @ParamField(sort = 4, len = 2, encode = ParamField.Encode.BCD)
    private int h;
    /**
     * 超时时间
     */
    @ParamField(sort = 5, len = 1, encode = ParamField.Encode.BCD)
    private int timeOut;
    /**
     * 要播放的语音
     */
    @ParamField(sort = 6, len = 1, lenType = ParamField.LenType.DYNAMIC, encode = ParamField.Encode.ASC)
    private String voice;
    /**
     * 是否播放语音信息 0-表示不播放,1-表示播放默认,2-表示播放指定
     */
    @ParamField(sort = 7, len = 1, encode = ParamField.Encode.BCD)
    private int voiceType;
    /**
     * 界面上的提示信息
     */
    @ParamField(sort = 8, len = 1, lenType = ParamField.LenType.DYNAMIC, encode = ParamField.Encode.ASC)
    private String info;
    /**
     * 用户操作类型
     */
//    @ParamField(sort = 9, len = 1, encode = ParamField.Encode.BCD)
//    private int operateType;
    /**
     * 协议信息
     */
    @ParamField(sort = 9, len = 1, lenType = ParamField.LenType.DYNAMIC, encode = ParamField.Encode.ASC)
    private String pro;
    private int operateType;
    public int getPage() {
        return page;
    }
    public void setPage(int page) {
        this.page = page;
    }
    public int getX() {
        return x;
    }
    public void setX(int x) {
        this.x = x;
    }
    public int getY() {
        return y;
    }
    public void setY(int y) {
        this.y = y;
    }
    public int getW() {
        return w;
    }
    public void setW(int w) {
        this.w = w;
    }
    public int getH() {
        return h;
    }
    public void setH(int h) {
        this.h = h;
    }
    public int getTimeOut() {
        return timeOut;
    }
    public void setTimeOut(int timeOut) {
        this.timeOut = timeOut;
    }
    public String getVoice() {
        return voice;
    }
    public void setVoice(String voice) {
        this.voice = voice;
    }
    public int getVoiceType() {
        return voiceType;
    }
    public void setVoiceType(int voiceType) {
        this.voiceType = voiceType;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public int getOperateType() {
        return operateType;
    }
    public void setOperateType(int operateType) {
        this.operateType = operateType;
    }
    public String getPro() {
        return pro;
    }
    public void setPro(String pro) {
        this.pro = pro;
    }
    @Override
    public String toString() {
        return "PDFSign2DTO{" +
                "page=" + page +
                ", x=" + x +
                ", y=" + y +
                ", w=" + w +
                ", h=" + h +
                ", timeOut=" + timeOut +
                ", voice='" + voice + ''' +
                ", voiceType=" + voiceType +
                ", info='" + info + ''' +
//                ", operateType=" + operateType +
                ", pro='" + pro + ''' +
                '}';
    }
}

枚举:


  1. 枚举是某个类的有限集合,它的对象个数不可由程序员增减,它的对象在一个枚举类生成的时候已经确定。


  1. 枚举的创建使用关键字enum,这意味着每个枚举类型的类都是java.lang.Enum 抽象类的子类。每个枚举类型的对象的创建都将调用java.lang.Enum中的protected Enum(String name,int ordinal)中的构造方法,ordinal记录当前对象的顺序,下标从0开始。由于Enum没有抽象方法,所以枚举类型即使不重写任何方法也不会编译出错。


注解:

Java 注解 —— 注解的理解、注解的使用与自定义注解_琦小虾的博客-CSDN博客_java注解的理解

Java 注解工作原理解析_小孩黑的博客-CSDN博客_java注解原理解析


反射应用:www.jianshu.com/p/89bdc4618…


可以放大自己权限,更改一些 listview这样固定空间的内容,由于没有api暴露出来,我们使用反射进行定制自己的内容。


反射原理:


我们知道,Java的每个.class文件里承载了类的所有信息内容,包含基佬父类、接口、属性、构造、方法等;这些class文件会在程序运行状态下通过ClassLoad类机制加载到虚拟机内存中并产生一个对象实例,然后这个对象就可以对这块内存地址进行引用;一般我们通过New一个对象创建就行,而利用反射我们通过JVM查找并指定加载的类名,就可以创建对象实例,而在java中,类的对象被实例化可以在内存中被引用时,就可以获取该类的所有信息。


反射invock()作用:(反射后进行方法调用并传递参数):


onlyMethod.invoke(myDog,"我是小狗,汪汪汪"); //要传入的参数,就写在后面即可,可以写多个,因为invoke接受的可变参数


blog.csdn.net/cadi2011/ar…



相关文章
|
小程序 安全 搜索推荐
【社区每周】新版O站上线,小程序新增无需审核的普通模板(2022年7月第三期)
【社区每周】新版O站上线,小程序新增无需审核的普通模板(2022年7月第三期)
361 12
|
并行计算 PyTorch 算法框架/工具
【pytorch】解决pytorch:Torch not compiled with CUDA enabled
【pytorch】解决pytorch:Torch not compiled with CUDA enabled
9406 0
|
存储 人工智能 运维
龙蜥副理事长张东:加速推进 AI+OS 深度融合,打造最 AI 的服务器操作系统
操作系统如何满足 AI 应用场景需求?未来发展趋势如何?
|
9月前
|
SQL 供应链 数据可视化
这可能是最适合探索式数据分析的工具
SPL(Structured Process Language)是一款结合了强大计算能力和灵活交互性的数据分析工具,特别适合探索式数据分析。它不仅支持分步执行和实时查看每步结果,还提供了丰富的表格数据计算类库,简化复杂运算。与Excel相比,SPL在处理复杂逻辑时更加简洁高效;相较于SQL和Python,SPL具备更好的交互性和更直观的操作体验。通过SPL的XLL插件,用户可以在Excel环境中直接使用SPL的强大功能,充分发挥两者优势。SPL开源免费,是探索式数据分析的理想选择。
|
Kubernetes 安全 API
k8s-身份认证与权限
k8s-身份认证与权限
333 1
|
前端开发
使用LangGraph构建多Agent系统架构!
【10月更文挑战第7天】
1935 0
|
消息中间件 存储 监控
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
164 4
|
开发框架 缓存 .NET
分享128个ASP源码,总有一款适合您
分享128个ASP源码,总有一款适合您
180 0
|
IDE Android开发 iOS开发
探索iOS与安卓应用开发的核心差异
本文深入探讨了iOS和安卓这两大移动操作系统在应用开发过程中所呈现出的关键性差别。从开发环境、编程语言,到用户界面设计、系统架构以及市场分布等方面,文章细致地分析了各自平台的优势与挑战,并提供了相应的统计数据和案例研究来支持分析结果。最终,文章旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和目标受众选择最适合的开发平台。 【7月更文挑战第25天】
118 3
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
138 0