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. 枚举是某个类的有限集合,它的对象个数不可由程序员增减,它的对象在一个枚举类生成的时候已经确定。
2. 枚举的创建使用关键字enum,这意味着每个枚举类型的类都是java.lang.Enum 抽象类的子类。每个枚举类型的对象的创建都将调用java.lang.Enum中的protected Enum(String name,int ordinal)中的构造方法,ordinal记录当前对象的顺序,下标从0开始。由于Enum没有抽象方法,所以枚举类型即使不重写任何方法也不会编译出错。
注解:
https://blog.csdn.net/ajianyingxiaoqinghan/article/details/81436118
https://blog.csdn.net/baidu_36385172/article/details/79953410
反射应用:https://www.jianshu.com/p/89bdc4618cd6
可以放大自己权限,更改一些 listview这样固定空间的内容,由于没有api暴露出来,我们使用反射进行定制自己的内容。
反射原理:
我们知道,Java的每个.class文件里承载了类的所有信息内容,包含基佬父类、接口、属性、构造、方法等;这些class文件会在程序运行状态下通过ClassLoad类机制加载到虚拟机内存中并产生一个对象实例,然后这个对象就可以对这块内存地址进行引用;一般我们通过New一个对象创建就行,而利用反射我们通过JVM查找并指定加载的类名,就可以创建对象实例,而在java中,类的对象被实例化可以在内存中被引用时,就可以获取该类的所有信息。
反射invock()作用:(反射后进行方法调用并传递参数):
onlyMethod.invoke(myDog,"我是小狗,汪汪汪"); //要传入的参数,就写在后面即可,可以写多个,因为invoke接受的可变参数