java反射--Field用法实践

Field是一个位于java.lang.reflect包下的类,用来描述类的属性信息,功能主要包括:

  • 获取哦大年对象的成员变量类型
  • 对成员变量重新设值

Field类对象:

Class.getFields(): 获取类中public类型的属性,返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有可访问公共字段
getDeclaredFields(): 获取类中所有的属性(public、protected、default、private),但不包括继承的属性,返回 Field 对象的一个数组
getField(String name): 获取类特定的方法,name参数指定了属性的名称
getDeclaredField(String name): 获取类特定的方法,name参数指定了属性的名称

Field 类对象常用方法:

Field.getType():返回这个变量的类型
Field.getGenericType():如果当前属性有签名属性类型就返回,否则就返回 Field.getType()
isEnumConstant() : 判断这个属性是否是枚举类

Field.getModifiers() 以整数形式返回由此 Field 对象表示的字段的 Java 语言修饰符

getName() : 获取属性的名字

get(Object obj) 返回指定对象obj上此 Field 表示的字段的值

set(Object obj, Object value) 将指定对象变量上此 Field 对象表示的字段设置为指定的新值

isAnnotationPresent(Class<? extends Annotation> annotationClass):如果该字段对象上有指定类型的注解,则返回true,否则为false

getAnnotation(Class<T> annotationClass):如果该字段对象存在指定类型的注解,则返回该注解,否则返回null

只有类级别的注解会被继承得到,对于其他对象而言,getAnnotation() 方法与 getDeclaredAnnotation() 方法作用相同

原文地址:https://www.cnblogs.com/ivywong11/p/10585504.html

时间: 2024-11-11 05:09:24

java反射--Field用法实践的相关文章

java反射field和method的顺序问题

最近在有思考到序列化性能优化的问题,关于java反射field和method的顺序问题,这里有详细的讨论http://stackoverflow.com/questions/5001172/java-reflection-getting-fields-and-methods-in-declaration-order javadoc不保证顺序,所以最好的方式仍然是通过自定义注解处理器实现,比如典型的可以借用jackson 的ordered注解JsonPropertyOrder或者objectMap

java 反射 Field类

-------用到一个bean Java代码   package com.ncs; public class Point { private int x; public int y; public Point(int x, int y) { super(); this.x = x; this.y = y; } } -------------------- Java代码   package com.ncs; import java.lang.reflect.Field; //need anothe

java反射的应用实践

java反射之前接触比较多,但仅技术方面思考的多:这次主要是从业务角度出发,思考java反射在业务模块设计中如何发挥更高效的作用,以提高生产率. 1.业务需求 要处理银行回单票据,提取出付款人.收款人及对应银行和业务信息,每个银行的格式都不统一.所以需要对各家银行的格式进行预处理,规整为标准格式后,交由后续模块处理. 这个预处理格式化的设计有多种 2.方案选型 做法 适用场景 技能要求 在if..else中添加分支逻辑 适用于分支较少的场景,如只有2~4个 简单 把分支逻辑提取为句柄,显示注册到

java反射的用法

反射(运行时的类信息),在java里面得到了大量的使用,尤其是在一些框架里面(注解等等),多多少少都会用到反射,了解java的反射,对我们以后学习框架和写框架都会起到非常的重要! Class类与java.lang.reflect类库一起对反射的概念进行了支持,该类库包括了FieId.Method以及Constructor类.这些类型的对象是由JVM在运行时创建的,用以表示未知类里对应的成员.这样你就可以使用Constructor创建新的对象,用get()和set()方法读取和修改与FieId对象

java反射(Field的应用)

//$Id: DirectPropertyAccessor.java 11405 2007-04-15 12:50:34Z [email protected] $ package org.hibernate.property; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Map; import org.hibernate.HibernateException; import o

Java 反射经常用法演示样例

<pre name="code" class="java">import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; class Point{ int x; private int y; public Point(){ x = 1; y = 2; } public void setX(int x) { thi

Java 反射的用法 有关Class类的解释

package com.imooc.test; public class ClassDemo1 { public static void main(String[] args) { Foo fool = new Foo();//foo1就表示出来了 //Foo 这个类也是一个实例对象,Class类的实例对象,如何表示呢 //任何一个类都是Class的实例对象,这个实例对象有三种表示方式 //第一种表示方式---> 实际在告诉我们任何一个类都有一个隐含的静态成员变量class Class cl =

Java反射实现原理分析

一.反射的用法 1.如何获取Class反射类 (1)通过getClass方法: Proxy proxy = new ProxyImpl(); Class proxyClazz = proxy.getClass(); (2)通过Class.forName方法 Proxy proxy = new ProxyImpl(); Class proxyClazz = Class.forName("com.dh.yjt.SpringBootDemo.test.Reflect.Proxy"); (3)

【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; private String name; private Boolean flag; public Integer getNum() { return num; } public void setNum(Integer num) { this.num = num; } public String getNam