枚举,注解 ,反射

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接受的可变参数

https://blog.csdn.net/cadi2011/article/details/97616545

发布了558 篇原创文章 · 获赞 464 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/104457073