对象有的属性在页面上可编辑,有的属性在页面只可读,以前都是我们在页面上写死的,时间一久有时候会混乱,此处通过自定义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的例子,博客地址:http://blog.csdn.net/yirentianran/article/details/52816764
NULL 博文链接:https://jeremy102.iteye.com/blog/1743919
使用annotationProcessor插件在编译期创建Java文件 使用在idea中 可以尝试下
一个非常简单的自定义Annotation注解demo,方便新手学习
Spring Boot+Redis+拦截器+自定义Annotation如何实现接口自动幂等.docx
JPA、EJB、Spring零配置等等怎么使用相信各位读者都能掌握,这里主要是说如何自定义自己的注解,自己使用自定义的注解。
本篇文章给大家介绍了使用springboot和拦截器、redis来优雅的实现接口幂等,对于幂等在实际的开发过程中是十分重要的,因为一个接口可能会被无数的客户端调用,如何保证其不影响后台的业务处理,如何保证其只影响...
Annotation自定义地图上的Annotation,在Annotation上加入图片。
@Target:用于描述注解的使用范围,如果自定义注解不存在@Target,则表示该注解可以使用在任何程序元素之上。接收参数ElementType,其值如下: /**接口、类、枚举、注解**/ ElementType.TYPE /**字段、枚举的常量**/...
自定义注解annotation及用法
自定义Result,自定义Annotation的实例
初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation生成javabean映射xml文件)还需要进一步的研究和探讨。涉及到深入annotation的内容,作者将在后文...
本文全面讲述了Java注解Annotation与Java自定义注解及相关内容,大家可以认真看看
Java基础复习笔记12Java自定义注解Annotation的使用
针对java 初学者或者annotation 初次使用者全面地说明了annotation 的使用方法、定义 方式、分类。...annotation 应用(例如使用自定义annotation 生成javabean 映射xml 文件)还需要进一步的 研究和探讨
本文针对java初学者或者annotation初次使用...初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation生成javabean映射xml文件)还需要进一步的研究和探讨。
自定义地图标注MKAnnotationView。在地图Annotation上加图片,自定义Annotation的文字字体以及颜色、大小等。 小编注:感谢开发者@小子Y个 编译测试,适用环境:Xcode 4.5, iOS 4.0 以上。
spring中自定义注解(annotation)与AOP中获取注解.通过实例演示自定义注解。
6.6 编写自定义Annotation 6.7 本章小结 第7章 闲言碎语 7.1 动机 7.2 TestNG哲学 7.3 关注和提供异常 7.4 有状态的测试 7.5 测试驱动开发的缺点 7.6 测试私有方法 7.7 测试与封装 7.8 调试器的威力 7.9 记日志的...