读书人

[原创][Annation、范型跟反射的具体应

发布时间: 2012-10-25 10:58:57 作者: rapoo

[原创][Annation、范型和反射的具体应用]属性获取器
范型和Annation是JDK 1.5的新特性,好多朋友对他感到非常陌生,只是在应用层面上使用它们。下面我们会对一个特定需求,分三个部分来写一个自己的范型和Annation。

需求如下:有两个Annotaion:@Id,@Content,它可以应用在任何JavaBean的属性(Field)上,我们要写一个小程序,来获取指定JavaBean的标注了@Id类型的属性的值,接口如下:



得到getter方法:



通过反射,得到值:


请注意上面的方法,对返回值做了范型,可以返回任意值



上面的改动只是解决了返回值的问题,但目前只支持@Id一种Annotaion,能不能对Annotaion也做范型呢,我输入什么Annotaion,就给我返回标注了Annotaion的属性的值,回答当然是可以的。
我们对接口修改如下:
public R getValue(T entity,Class<R> resultType,Class<A> annotationType) throws Exception; 


有问题欢迎与我讨论。 3 楼 summeryhrb 2009-07-29 我的意思是
IdRetriever3<User,String,Id> ui = new IdRetrieverImpl3<User,String,Id>();
这句话,已经把String和Id这两个类型具体化了,
4 楼 summeryhrb 2009-07-29 泛型只是在定义的时候定义成模板,

泛型最开始出现在c++里,在c++里叫模板 5 楼 ravenex 2009-07-29 summeryhrb 写道泛型只是在定义的时候定义成模板,

泛型最开始出现在c++里,在c++里叫模板
主流语言里泛型最早是在Ada里出现的吧,C++还没见影 6 楼 jakoes 2009-08-03 summeryhrb 写道我的意思是
IdRetriever3<User,String,Id> ui = new IdRetrieverImpl3<User,String,Id>();
这句话,已经把String和Id这两个类型具体化了,


这里的String和Id只是定义返回类型和annatation类型的模板,非具体化。声明Id的类型只是让这个方法能应用于更多的annation,如@Id、@Content

读书人网 >软件架构设计

热点推荐