Java 自定义注解

本贴最后更新于 2301 天前,其中的信息可能已经时过境迁

定义注解类

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target({ElementType.FIELD}) //定义注解的作用目标**作用范围字段、枚举的常量/方法
public @interface FieldMeta {
	int len() default 10;//长度,默认为10。
}

定义类使用注解

public class BillItemHuawei {
	@FieldMeta(len=10)
	private int recordType;//    Integer    4    记录类型。    25:ismpRecord
	@FieldMeta(len=10)
    private int streamNo;//    Integer    4    流水号,由网关生成,最大值为4294967295。
	@FieldMeta(len=10)
    private String timeStamp;//    Octet String    10    时间戳,由发端设备生成,网关收到消息的时间。格式:月日时分秒。
	@FieldMeta(len=20)
    private String msgID;
}

利用注解

public String getLine(BillItemHuawei item) {
	Class c = item.getClass();
	Field fields[] = c.getDeclaredFields();
	StringBuffer sb = new StringBuffer();
	for(int i=0;i<fields.length;i++){
		sb.append(getPropertyValue(item, fields[i]));
		if(i!=fields.length-1){
			sb.append(PropertiesUtil.getProperties("fieldSeparator"));
		}
	}
	//System.out.println(sb.toString());
	return sb.toString();
}

public String getPropertyValue(Object owner, Field field) {
	FieldMeta meta;
	int len = 10;
	String formatStr = "";
	meta = field.getAnnotation(FieldMeta.class);
	if(meta != null){
		len = meta.len();
		if(field.getType().getName().equals("int")){
			formatStr = "%0" + len + "d";
		}else{
			formatStr = "%-" + len + "s";
		}
	}
	Object o = getPropertyValue(owner, field.getName());
	return String.format(formatStr, o);
}

public Object getPropertyValue(Object owner, String methodName) {
	Class ownerClass = owner.getClass();
	methodName = methodName.substring(0, 1).toUpperCase()
			+ methodName.substring(1);
	Method method = null;
	try {
		method = ownerClass.getMethod("get" + methodName);
		Object o=method.invoke(owner);
		if(o==null)
			return "";
		return o;
	} catch (Exception e) {
		return " can't find 'get" + methodName + "' method";
	}
}

原文

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3190 引用 • 8214 回帖 • 1 关注
  • len
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...