[原创][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