为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第5天 JAVA-Reflect专题

标签:
Java

课程名称:JAVA反射

课程章节:1-4 获取成员变量信息

课程讲师: Cedar

课程内容:

 一、获取成员变量信息

1、成员变量

成员变量也是对象

java.lang.relect.Field

Field类封装了关于成员变量的操作

getFields()方法获取的是所有的public的成员变量的信息

getDeclaredFields获取的是该类自己声明的成员变量的信息

Field[] fs = c.getDeclaredFields();

for(Field field:fs){

Class fieldType = field.getType();

String typeName = fieldType.getName(); //成员变量的类型的类类型

String fieldName = field.getName(); //成员变量的名称

}

2、构造函数

构造函数也是对象

java.lang.Constructor中封装了构造函数的信息

getConstructors()获取所有的public的构造函数

getDeclaredConstructors得到所有的构造函数

Constructor[] cs = c.getDeclaredConstructors();

for(Constructor constructor:cs){

String constructorName = constructor.getName();

Class[] paramType = constructor.getParameterTypes();

for(Class class1:paramType){

String paramTypeName = class1.getName();

}

}

https://img1.sycdn.imooc.com//63e7a5ee0001badd14520814.jpg

二、方法的反射

1、概述

方法的名称和方法的参数列表唯一决定某个方法

方法反射的操作:method.invode(对象,参数列表)

2、获取类的信息、获取类的类类型,根据方法名称和参数列表获取方法

A a1 = new A();

Class c = a1.getClass();

Method m = c.getMethod("print",new Class[]{int.class,int.class});//获取的是public的方法

Method m = c.getDeclaredMethod("print",new Class[]{int.class,int.class});//获取的是自己声明的方法

3、方法的反射

//用方法对象来进行方法调用

//方法如果没有返回值返回null,有返回值返回具体的返回值

m.invoke(a1,new Object[]{10,20});

m.invoke(a1,10,20);

三、集合泛型

Java中集合的泛型是防止错误输入的,只在编译阶段有效果

编译之后集合的泛型是去泛型化的

ArrayList<String> list1 = new ArrayList<String>();

list1.add("hello");

Class c2 = list.getClass();

Method m = c2.getMethod("add",Object.class);

m.invoke(list1,20);//绕过编译操作就绕过了泛型


课程收获:

本节课程加深了反射、泛型与编译过程的关系,期待后续继续学习反射的一些实际使用场景案例。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消