Field对象的机制与实现
1、Field对象概述
1)Java.lang.reflect.Field类,是用于表示类中、接口中属性对象的类。
2)可以操作类中私有,以及公有等全部属性和属性的信息。
2、Field对象的常用方法介绍
方法名 | 释义 |
---|---|
getName() | 获取属性名称 |
getType() | 获取属性类型 |
get(Object obj) | 取得obj对象中这个属性的值 |
set(Object obj,Object value) | 向boj这个属性赋值value |
setAccessible(boolean) | 启用/禁用访问控制权限 |
package com.rainmer.main;
import java.lang.reflect.Field;
import com.rainmer.bean.Book;
public class FieldTest {
//改方法用于使用传递过来的Class对象获取类中的属性
public void show(Class c1){
Field[] fi = c1.getDeclaredFields();//可以获取所有属性,无论公有还是私有
System.out.println("~~~~~~~~~~~~获取所有有属性(包括私有)~~~~~~~~~~~~~~");
for(Field ff : fi){
System.out.println(ff.getName());
System.out.println(ff.getType());
}
System.out.println("~~~~~~~~~~~~只能获取共有属性~~~~~~~~~~~~~~");
Field[] fi1 = c1.getFields();//只能获取共有属性
for (Field ff : fi1) {
System.out.println(ff.getName());//属性名称
System.out.println(ff.getType());//属性类型
}
}
//该方法用于使用传递过来的实体类对象获取属性以及属性的值
public void show(Object ob){
System.out.println("~~~~~~~~~~~~~~~通过实体类对象获取属性以及属性的值~~~~~~~~~~~~~~~~~~~");
Class cl = ob.getClass();
Field[] fi = cl.getDeclaredFields();
try{
for (Field ff : fi) {
ff.setAccessible(true);//启用访问权限,并不是把私有属性变成共有属性
System.out.println(ff.getName()+"值"+ff.get(ob));
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Book bo = new Book();
bo.setId(1);
bo.setName("斗破苍穹");
bo.setType("玄幻");
FieldTest ft = new FieldTest();
ft.show(Book.class);
ft.show(bo);
}
}
运行结果:
调用了setName方法 ~~~~~~~~~~~~获取所有有属性(包括私有)~~~~~~~~~~~~~~ id int name class java.lang.String type class java.lang.String ~~~~~~~~~~~~只能获取共有属性~~~~~~~~~~~~~~ type class java.lang.String ~~~~~~~~~~~~~~~通过实体类对象获取属性以及属性的值~~~~~~~~~~~~~~~~~~~ id值1 name值斗破苍穹 type值玄幻