博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[置顶] 重复造轮子:注释的使用
阅读量:5154 次
发布时间:2019-06-13

本文共 3086 字,大约阅读时间需要 10 分钟。

package com.metarnet.model;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import java.lang.reflect.Field;import java.text.SimpleDateFormat;import java.util.Date;/** * 注释测试 * @author yanfan * 不使用已指定的数据类型,而使用注释来标注其数据类型 * 其中有四个类:MainTest(主函数,用于测试) * 		TestNote(MODEL,用于存放数据) * 		NoteEnum(定义注释中的属性可以存放的值) * 		Note(注释) * 使用@Note(Name=NoteEnum.String)来标注一个数据 */public class MainTest {	public static void main(String[] args) {		TestNote note = new TestNote();		try {			note.setTestInt(123);			note.setTestDate(new Date());			note.setTestString("Test");			//note.setTestString("Test");			System.out.println("TestDate:"+note.getTestDate());			System.out.println("TestInt:"+note.getTestInt());			System.out.println("TestString:"+note.getTestString());		} catch (Exception e) {			e.printStackTrace();		}	}}/** * 在此声明三个参数,全部使用String类型,但使用注释标注它的类型 * @author yanfan * */class TestNote {	@Note(Name=NoteEnum.String)	protected String TestString;	@Note(Name=NoteEnum.Int)	protected String TestInt;	@Note(Name=NoteEnum.Date)	protected String testDate;	public Object getTestString() throws Exception {		return GET("TestString");	}	public void setTestString(Object testString) throws Exception{		SET("TestString", testString);	}	public Object getTestInt() throws Exception {		return GET("TestInt");	}	public void setTestInt(Object testInt) throws Exception{		SET("TestInt", testInt);	}	public Object getTestDate() throws Exception {		return GET("testDate");	}	public void setTestDate(Object testDate) throws Exception{		SET("testDate", testDate);	}	private void SET(String Name,Object value) throws Exception	{		Field field = TestNote.class.getDeclaredField(Name);		if(field.getAnnotation(Note.class).Name() == NoteEnum.Date)		{			field.set(this,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value));		}else if(field.getAnnotation(Note.class).Name() == NoteEnum.Int){			field.set(this,value.toString());		}else {			field.set(this,value);		}	}	private Object GET(String Name)throws Exception	{		Field field = TestNote.class.getDeclaredField(Name);		if(field.getAnnotation(Note.class).Name() == NoteEnum.Date)		{			return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(field.get(this).toString());		}else if(field.getAnnotation(Note.class).Name() == NoteEnum.Int){			return Integer.parseInt(field.get(this).toString());		}else {			return field.get(this).toString();		}	}}/** * 定义可以在注释中选择的参数 * @author yanfan * */enum NoteEnum {	String,	Date,	Int}/** * 定义一个可以使用在参数上的注释 * @author yanfan * */	/**	 * CONSTRUCTOR : 构造器的声明	 * FIELD : 域声明(包括enum实例)	 * LOCAL_VARIABLE : 局部变量声明	 * METHOD : 方法声明	 * PACKAGE : 包声明	 * PARAMETER : 参数声明	 * TYPE : 类、接口 (包括注解类型) 或enum声明	 */@Target(ElementType.FIELD)	/**	 * SOURCE : 注释将被编译器丢掉	 * CLASS : 注释在class文件中可用,但会被VM丢弃	 * RUNTIME : VM将在运行时也保留注释,因此可以通过反射机制读取注释的信息。	 */@Retention(RetentionPolicy.RUNTIME) @interface Note {	public NoteEnum Name();//返回为枚举类型}

(这是执行正确返回的值,可以明显的看出来其数据类型)

当我将测试类型设置为这个之后,

转载于:https://www.cnblogs.com/yanfan/archive/2012/11/16/2989465.html

你可能感兴趣的文章
《windows核心编程系列》三谈谈内核对象及句柄的本质
查看>>
Linux下安装maven
查看>>
使用OpenMP实现并行归并排序(Report)
查看>>
转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量...
查看>>
linux nohup【转】
查看>>
SQL语句优化
查看>>
校验银行卡号是否符合Luhn算法及生成符合Luhn算法的银行卡号
查看>>
MFC 双缓冲加载背景
查看>>
记录自己最近的学习状态
查看>>
hdu 1142 最短路+记忆化深搜---好题
查看>>
day 018 面向对象--约束和异常处理
查看>>
Day3_基本数据类型
查看>>
Fire Maze(广度优先搜索)
查看>>
Linux Kernel API
查看>>
oracle学习
查看>>
【C语言项目】贪吃蛇游戏(下)
查看>>
DevExpress第三方控件汉化的全部代码和使用方法
查看>>
二分查找算法(C#实现)
查看>>
vue项目中开启Eslint碰到的一些问题及其规范
查看>>
ES terms多值搜索及范围过滤深入剖析-搜索系统线上实战
查看>>