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值玄幻