枚举,注解 ,反射

本文涉及的产品
文本翻译,文本翻译 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…



目录
相关文章
|
4月前
|
Java 程序员 API
注解和反射
这篇文章详细介绍了Java注解的概念、作用、内置注解、元注解、自定义注解,
注解和反射
|
5月前
|
Java 程序员 编译器
注解和反射(一)
注解和反射
34 0
|
5月前
|
Java 编译器
注解和反射(二)
注解和反射
30 0
|
7月前
枚举和注解
枚举是常量集合,表现为特殊类,包含有限特定对象。适用于只读场景。实现方式有两种:自定义类和使用`enum`关键字。自定义类实现时,常量用`final static`修饰,名称全大写。枚举可含多个属性。示例中展示了自定义枚举类`Season`,包含四个季节实例,构造器私有化且无setter,确保不可修改。
29 1
|
7月前
|
XML 安全 Java
反射&&枚举
反射&&枚举
42 0
|
Java
66.【注解与反射】(三)
66.【注解与反射】
46 0
|
编译器
反射、注解和泛型相关的坑
泛型 类型擦除 桥接方法