field java_Java : Field 简介

java.lang.reflect.Field API 简介

package chapter.lang.reflect;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

/**

* 提供有关类或接口的单个字段的信息和动态访问。

* 反射的字段可以是类(静态)字段或实例字段。

*/

public class FieldDemo {

public static Logger logger = LoggerFactory.getLogger(FieldDemo.class);

public static final String CLASSNAME = "ZHX";

private static final int CLASSSAGE = 20;

public String name;

private int age;

public FieldDemo next;

public FieldDemo(){

}

public FieldDemo(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public String toString() {

final StringBuffer sb = new StringBuffer("FieldDemo{");

sb.append("name='").append(name).append('\'');

sb.append(", age=").append(age);

sb.append(", next=").append(next);

sb.append('}');

return sb.toString();

}

// 1. 名字相关

/**

* 返回由此 Field对象表示的字段的名称。

* StringgetName()

*

* 返回描述此 Field的字符串,包括其通用类型。

* StringtoGenericString()

*

* 返回一个描述这个 Field的字符串。

* StringtoString()

*/

//2. 设置值

/**

* 将指定对象参数上的此 Field对象表示的字段设置为指定的新值。

* voidset(Object obj, Object value)

*

* 设置作为一个字段的值 boolean指定的对象上。

* voidsetBoolean(Object obj, boolean z)

*

* 设置作为一个字段的值 byte指定的对象上。

* voidsetByte(Object obj, byte b)

*

* 设置作为一个字段的值 char指定的对象上。

* voidsetChar(Object obj, char c)

*

* 设置作为一个字段的值 double指定的对象上。

* voidsetDouble(Object obj, double d)

*

* 设置作为一个字段的值 float指定的对象上。

* voidsetFloat(Object obj, float f)

*

* 设置作为一个字段的值 int指定的对象上。

* voidsetInt(Object obj, int i)

*

* 设置作为一个字段的值 long指定的对象上。

* voidsetLong(Object obj, long l)

*

* 设置作为一个字段的值 short指定的对象上。

* voidsetShort(Object obj, short s)

*

*/

// 3. 取值函数

/**

* 返回该所表示的字段的值 Field ,指定的对象上。

* Objectget(Object obj)

*

* 获取静态或实例的值 boolean字段。

* booleangetBoolean(Object obj)

*

* 获取静态或实例的值 byte字段。

* bytegetByte(Object obj)

*

* 获取类型为 char的静态或实例字段的值,或通过扩大转换获得可转换为类型 char的另一个原始类型的值。

* chargetChar(Object obj)

*

* 获取类型为 double的静态或实例字段的值,或通过扩展转换转换为类型 double的另一个基本类型的值。

* doublegetDouble(Object obj)

*

* 获取类型为 float的静态或实例字段的值,或通过加宽转换转换为类型 float的另一个基本类型的值。

* floatgetFloat(Object obj)

*

* 获取类型为 int的静态或实例字段的值,或通过扩展转换转换为类型 int的另一个原始类型的值。

* intgetInt(Object obj)

*

* 获取类型为 long的静态或实例字段的值,或通过扩大转换获得可转换为类型 long的另一个基本类型的值。

* longgetLong(Object obj)

*

* 获取类型为 short的静态或实例字段的值,或通过加宽转换转换为类型 short的另一个基本类型的值。

* shortgetShort(Object obj)

*

*/

// 4. 描述符号

/**

* intgetModifiers()

* 返回由该 Field对象表示的字段的Java语言修饰符,作为整数。

*/

// 5. 数据类型

/**

* 返回一个 Type对象,它表示由该表示的字段的声明类型 Field对象。

* TypegetGenericType()

*

* 返回一个 类对象标识了此表示的字段的声明类型 Field对象。

* Class>getType()

*

* 返回一个AnnotatedType对象,该对象表示使用类型来指定此Field所表示的字段的声明类型。

* AnnotatedTypegetAnnotatedType()

*

*/

// 6. 类

/**

* 返回表示 类对象表示的字段的类或接口的 Field对象。

* Class>getDeclaringClass()

*/

// 7. 字段上的注解

/**

* 返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。

* TgetAnnotation(类 annotationClass)

*

* 返回与此元素相关联的注释 。

* T[]getAnnotationsByType(Class annotationClass)

*

* 返回 直接存在于此元素上的注释。

* Annotation[]getDeclaredAnnotations()

*

*/

// 8. 其他

/**

* 如果此字段表示枚举类型的元素,则返回true ; 返回false其他。

* booleanisEnumConstant()

*

* 如果此字段是合成字段,则返回true ; 返回false其他。

* booleanisSynthetic()

*

*/

public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {

FieldDemo demo = new FieldDemo("zhx",25);

System.out.println(demo);

Field[] fields = demo.getClass().getDeclaredFields();

//fields = String.class.getDeclaredFields();

for(Field field : fields){

logger.info("{} {} {} ", Modifier.toString(field.getModifiers()),field.getType().getName(),field.getName());

}

for(Field field : fields){

logger.info("{} ", field.toGenericString());

}

logger.info(">>>>>>>>>>>>>>");

Field f = demo.getClass().getDeclaredField("age");

f.setInt(demo,100);

logger.info("设置年龄后 = {}",demo.toString());

f = demo.getClass().getDeclaredField("name");

Object o = f.get(demo);

System.out.println(o.getClass().getCanonicalName() + ":" + o.toString());

f = demo.getClass().getDeclaredField("age");

int anInt = f.getInt(demo);

System.out.println(anInt);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值