当前位置: 首页 > news >正文

获取泛型信息及获取注解信息

一、获取泛型信息

反射操作泛型:

➢Java采用泛型擦除的机制来引入泛型, Java中的泛型仅仅是给编译器javac使用的,确保数据的安全性和免去强制类型转换问题, 但是,一旦编译完成,所有和泛型有关的类型全部擦除

➢为了通过反射操作这些类型, Java新增了ParameterizedType , GenericArrayType ,TypeVariable和WildcardType几种类型来代表不能被归一到Class类中的类型但是又和原始类型齐名的类型.

➢ParameterizedType :表示一种参数化类型,比如Collection<String>

➢GenericArrayType :表示一种元素类型是参数化类型或者类型变量的数组类型

➢TypeVariable : 是各种类型变量的公共父接口

➢WildcardType :代表一种通配符类型表达式

//通过反射获取泛型
public class Test11 {public void  test01(Map<String,User> map, List<User> list){System.out.println("test01");}public Map<String,User> test02(){System.out.println("test02");return null;}public static void main(String[] args) throws NoSuchMethodException {Method method = Test11.class.getMethod("test01", Map.class, List.class);Type[] genericParameterTypes = method.getGenericParameterTypes();//获得泛型的参数类型for (Type genericParameterType : genericParameterTypes) {System.out.println("#"+genericParameterType);if (genericParameterType instanceof ParameterizedType){//ParameterizedType 参数化类型Type[] actualTypeArguments = ((ParameterizedType) genericParameterType).getActualTypeArguments();//getActualTypeArguments()获得真实参数信息for (Type actualTypeArgument : actualTypeArguments) {System.out.println(actualTypeArgument);}}}method = Test11.class.getMethod("test02",null);Type genericReturnType = method.getGenericReturnType();if (genericReturnType instanceof  ParameterizedType){Type[] actualTypeArguments = ((ParameterizedType) genericReturnType).getActualTypeArguments();for (Type actualTypeArgument : actualTypeArguments) {System.out.println(actualTypeArgument);}}}}

二、获取注解信息

练习:ORM

◆了解什么是ORM ?

◆Object relationship Mapping -->对象关系映射

◆类和表结构对应◆属性和字段对应◆对象和记录对应,

◆要求:利用注解和反射完成类和表结构的映射关系

//练习反射操作注解
public class Test12 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {Class c1 = Class.forName("com.reflection.Student2");//通过反射获得注解Annotation[] annotations = c1.getAnnotations();for (Annotation annotation : annotations) {System.out.println(annotation);}//获得注解的value的值Tablekuang tablekuang =(Tablekuang) c1.getAnnotation(Tablekuang.class);String value = tablekuang.value();System.out.println(value);//获得类指定的注解Field f = c1.getDeclaredField("id");Fieldkuang annotation = f.getAnnotation(Fieldkuang.class);System.out.println(annotation.columName());System.out.println(annotation.type());System.out.println(annotation.length());}
}
@Tablekuang("db_student")
class Student2{@Fieldkuang(columName = "da_id",type = "int",length = 10)private int id;@Fieldkuang(columName = "da_age",type = "int",length = 10)private int age;@Fieldkuang(columName = "da_name",type = "varchar",length = 3)private String name;public Student2(){}public Student2(int id,int age,String name){this.id = id;this.age = age;this.name = name;}public void setId(int id) {this.id = id;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public int getId() {return id;}public int getAge() {return age;}public String getName() {return name;}@Overridepublic String toString() {return "Student2{" +"id=" + id +", age=" + age +", name='" + name + '\'' +'}';}
}//类名的注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Tablekuang{String value();
}//属性的注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Fieldkuang{String columName();String type();int length();
}
http://www.dtcms.com/a/578575.html

相关文章:

  • 会展免费网站模板网站优化课程
  • 【赵渝强老师】Redis数据的迁移
  • Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
  • Rust开发完全指南:从入门到与Python高效融合
  • 石家庄免费建站模板我不想找之前做网站的续费
  • 商城网站模板 免费五个跨境电商平台
  • 无人设备遥控器之数字图传技术
  • 哪个网站用织梦做的2017网站开发就业前景
  • 网站设计公司深圳ppt的网站导航栏怎么做的
  • React中的componentWillUnmount 使用
  • 培训型网站建设中华建设网站
  • 大型网站建设公司推荐店面设计餐饮
  • 中山品牌网站建设推广注册域名成功后怎样建设网站
  • 化妆品网页设计模板素材做网站优化用什么软件
  • 移动端高端网站怎么帮商家推广赚钱
  • 餐饮网站源码一个网站有几个快照
  • Windows Qt打开外部程序
  • 怎么建设商品网站网站建设首选公司
  • 西宁网站建设加盟代理北京高端网站制作公司
  • 微信小程序minium自动化测试SOP
  • 如何做好电子商务网站开发企业网站博客上如何营销
  • 【LeetCode】103. 二叉树的锯齿形层序遍历
  • 车联网终端TBOX车载无线4G网络盒子知识详解
  • 什么网站能免费做公众号封面做一个平面网站的成本
  • 作业11.6
  • 做网站项目流程国外文件传输网站
  • 论文分享 |重新思考3D分割:Unified-Lift——端到端的高斯泼溅场景分割新范式
  • xwiki做的网站邢台同城
  • 网站建设工作台账饲料公司网站建设方案
  • 初识MYSQL —— 内置函数