当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

自定义annotation

发表于: 2014-09-29   作者:sha1064616837   来源:转载   浏览:
摘要: 对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义annotation在类属性中定义。越来越发现Java的Annotation真心很强大,可以帮我们省去很多代码,让代码看上去简洁。 下面这个例子 主要用到了 1.自定义annotation:@interface,以及几个配合着自定义注解使用的几个注解 2.简单的反射 3.枚举
对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义annotation在类属性中定义。越来越发现Java的Annotation真心很强大,可以帮我们省去很多代码,让代码看上去简洁。
下面这个例子 主要用到了
1.自定义annotation:@interface,以及几个配合着自定义注解使用的几个注解
2.简单的反射
3.枚举
详细代码:
1.定义一个是可编辑还是可读的枚举类,可以用Boolean实现,但是枚举以后可以扩展到更多的值,枚举,如果不能像性别只有男、女这么确定,建议加一个“未知”,留作以后扩展
package com.sha.annotation;

public enum EditEnum {
	UNKNOW("未知",0),
	WRITE("可写",1),
	READ("可读",2);
	/**
	 * 中文描述
	 */
	private String desc;
	/**
	 * 自定义序号
	 */
	private int index;
	
	private EditEnum(String desc, int index) {
		this.desc = desc;
		this.index = index;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public int getIndex() {
		return index;
	}
	public void setIndex(int index) {
		this.index = index;
	}
}

2.自定义一个annotation,属性为EditEnum,默认可编辑,因为可编辑的属性占多数
package com.sha.annotation;

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

@Inherited//允许子类继承父类的注解
@Documented//在生成javadoc文档的时候将该Annotation也写入到文档中。
@Target({ElementType.FIELD})//该自定义annotation只能用在子属性上
@Retention(RetentionPolicy.RUNTIME) //注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,所以他们可以用反射的方式读取
public @interface Editable {
	/**
	 * 默认可编辑
	 * @return
	 */
	public EditEnum value() default EditEnum.WRITE;
}

3.定义一个用户类,用Editable 来标识属性是否可编辑
package com.sha.annotation;

public class Operator{

	/**
	 * 用户ID,只可读
	 */
	@Editable(value=EditEnum.READ)
	private int id;
	
	/**
	 * 用户姓名,只可读
	 */
	@Editable(value=EditEnum.READ)
	private String name;
	
	/**
	 * 用户真实姓名,可编辑
	 */
	@Editable
	private String trueName;
	
	/**
	 * 用户密码可编辑
	 */
	@Editable
	private String password;
	
	/**
	 * 用户电话号码,可编辑
	 */
	@Editable
	private String phone;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTrueName() {
		return trueName;
	}

	public void setTrueName(String trueName) {
		this.trueName = trueName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}
}

4.通过反射获取各个Operator子属性的可编辑属性
package com.sha.annotation;

import java.lang.reflect.Field;

public class EditTest {
	public static void main(String[] args) {
		Operator op = new Operator(); 
		Class<?>  ed = op.getClass();
		Field[] fields = ed.getDeclaredFields();
		for (int i = 0; i < fields.length; i++) 
		{
			if(fields[i].isAnnotationPresent(Editable.class))
			{
				Editable flag = fields[i].getAnnotation(Editable.class);
				System.out.println(fields[i].getName()+"=="+flag.value().name()+"=="+flag.value().getIndex()+":"+flag.value().getDesc());
			}
		}
	}
}

Java的注解是个好东西,Java反射是个好东西。所以好东西需要保留。

自定义annotation

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
package annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Ret
在上一篇文章中介绍了注解的原理和适用场景,这一篇开始如何自定义Annotation。 Annotation是不同于
关注微信号:javalearns 随时随地学Java 或扫一扫 随时随地学Java 创建一个自定义的Annotation impo
Annotation 是一种用于描述数据的一种数据,在Java里所描述的数据指的是Java的程序代码,主要目的是
Lombok简介 Lombok(https://projectlombok.org/) 提供了以注解的形式为java对象增加属性和方法,这
(推荐本人创建的一个iOS开源代码收集网站 Code4app.com) 之前写了一篇关于获取当前位置的文章。现
1. 前言 自JDK1.5以后,推出了注解新特性。注解的推出其实最主要的目的是为了让广大的用户认知EJB3.
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要
注解的作用: 1、生成文档。这是最常见的,也是java 最早提供的注解。常用的有@see @param @return
1. 前言 自JDK1.5以后,推出了注解新特性。注解的推出其实最主要的目的是为了让广大的用户认知EJB3.
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号