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 + ''' + '}'; } }
枚举:
- 枚举是某个类的有限集合,它的对象个数不可由程序员增减,它的对象在一个枚举类生成的时候已经确定。
- 枚举的创建使用关键字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接受的可变参数