Java核心技术之反射

反射获取类信息

重要方法:
构造器相关:

  • Constructor<T> getConstructor(Class<?>... parameterTypes) # 获取指定类型的构造方法
  • Constructor<?>[] getConstructors() # 获取全部构造方法

方法相关

  • Method getMethod(String name, Class<?>... parameterTypes)#获得指定类型方法
  • Method[] getMethods()#获得全部方法

成员变量相关:

  • Field getField(String name)# 获得成员变量
  • Field[] getFields()# 获得所有成员变量

以上方法包含两种形态,一种只能获取public权限的,一种可以无视权限的。其规则如下:
例如:getField 表示:获取public权限;getDeclaredField表示,无视权限;其差别仅多一个“Declared”

注解相关:

  • <A extends Annotation> A getAnnotation(Class<A> annotationClass)# 获取类对象注解
  • getDeclaredAnnotation # Java8新出方法,作用:获取直接修饰该类的注解
  • Annotation[] getAnnotations()获取修饰类的所有注解
  • <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)# Java8新出方法:获取指定类型注解在当前类上。

Class相关:

  • Class<?>[] getDeclaredClasses()# 获取所有内部类
  • Class<?> getDeclaringClass()# 获取类的外部类
  • Class<?>[] getInterfaces()# 获取接口
  • Class<? super T> getSuperclass()# 获取父类
  • int getModifiers()# 获取真实修饰符,如:public private
  • Package getPackage()# 获取包
  • getName、getSimpleName# 获取名称

判断是否为类、接口、枚举等:isArray、isAnnotation…

反射获取方法

clz.getMethod("info", String.class)
将会获取一个名叫info且只有一个String类型参数的方法,例如:
info(String string)

getMethod方法:第一个参数为“将要获取的方法名称”,后面可变参数为参数类型
获取构造器只需要确认参数列表即可,因为构造器只有一个方法名。

使用反射操作对象

Class对象可以获取类中的方法(Method)、构造器(Constructor)、成员变量(Field),这三个类都处于java.lang.reflect包下。

创建对象

  • clz.newInstance()
  • constructor.newInstance()

调用方法

TestClass obj = TestClass.class.newInstance();
Class cls = TestClass.class;
Method m = cls.getMethod("info", String.class);
m.invoke(obj, "你好呀~");

调用invoke方法即可,第一个参数传递方法的实例对象。第二个传递参数。

设置属性值

Field field = cls.getField("age");
field.set(obj, 10);

obj为实例对象

若无法访问,尝试调用setAccessible设置为true

获取泛型类型

变量声明为:public HashSet<TestClass> set;

Class cls = TestClass.class;
Field f = cls.getField("set");
ParameterizedType pt = (ParameterizedType) f.getGenericType();
System.out.println("原始类型:" + pt.getRawType());
Type[] ata = pt.getActualTypeArguments();
System.out.println("泛型类型:" + ata[0]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值