field 属性操作
首先必须明一点 Field类主要是用来辅助获取和操作类的属性的!
1.怎么通过反射获取类的属性
先来看JDK提供的方法有如下几种:
a)Class.getDeclaredField(String name);
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
b)Class.getDeclaredFields();
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
c)Class.getField(String name);
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
d);Class.getField()
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
来一个例子来说明一下 :
实体类:
import java.util.Date;
/**
* @ClassName: Student
* @Description: 学生实体
* @author JoseanLuo
* @date 2014-3-18 下午5:17:35
* @version V1.0
*/
public class Student
{
private Long id;
private String name;
private Date createdate;
private String no;
public String nickname;
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Date getCreatedate()
{
return createdate;
}
public void setCreatedate(Date createdate)
{
this.createdate = createdate;
}
public String getNo()
{
return no;
}
public void setNo(String no)
{
this.no = no;
}
public String getNickname()
{
return nickname;
}
public void setNickname(String nickname)
{
this.nickname = nickname;
} }
测试类:
import java.lang.reflect.Field;
import java.util.Date;
/**
* @ClassName: ReflectFieldTest
* @Description: 反射Field测试。
* @author JoseanLuo
* @date 2014-3-18 下午5:16:17
* @version V1.0
*/
public class ReflectFieldTest
{ public static void main(String[] args)
{ Student stu=new Student();
stu.setId(1L);
stu.setName("Josean");
stu.setNo("201403185203344");
stu.setCreatedate(new Date());
try
{
Field property1=stu.getClass().getDeclaredField("name");
System.out.println(property1);//private java.lang.String com.cx.test.Student.name
Field property3=stu.getClass().getField("nickname");
System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname
//错误方法 getField系列方法只能获取公共字段
//Field property2=stu.getClass().getField("name");
//System.out.println(property2);
//会抛java.lang.NoSuchFieldException } catch (SecurityException e)
{ e.printStackTrace();
} catch (NoSuchFieldException e)
{ e.printStackTrace();
}
} }
2.进行属性获取更改
得到这个Field之后你就可以获取他的值或者设置他的值了。
获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。
值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。
同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。
import java.lang.reflect.Field;
import java.util.Date;
/**
* @ClassName: ReflectFieldTest
* @Description: 反射Field测试。
* @author JoseanLuo
* @date 2014-3-18 下午5:16:17
* @version V1.0
*/
public class ReflectFieldTest
{ public static void main(String[] args) throws Exception
{ Student stu=new Student();
stu.setId(1L);
stu.setName("Josean");
stu.setNo("201403185203344");
stu.setCreatedate(new Date());
stu.setNickname("copyman");
Field property1=stu.getClass().getDeclaredField("name");
//System.out.println(property1);//out:private java.lang.String com.cx.test.Student.name
Field property3=stu.getClass().getField("nickname");
System.out.println(property3.get(stu));
//System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname
//错误方法 getField系列方法只能获取公共字段
//Field property2=stu.getClass().getField("name");
//System.out.println(property2);
//会抛java.lang.NoSuchFieldException
Field [] prFields4=stu.getClass().getDeclaredFields();
for(Field field:prFields4)
{
System.out.println(field);
System.out.println(field.equals(property1));
//私有变量必须先设置Accessible为true
field.setAccessible(true);
//获取用get类方法。
System.out.println(field.get(stu));
}
//设置用set类方法
property3.set(stu, "名字被我改了,哈哈"); System.out.println(stu.getNickname()); } }
field 属性操作的更多相关文章
- css样式之属性操作
一.文本属性 1.text-align:cnter 文本居中 2.line heigth 垂直居中 :行高,和高度对应 3.设置图片与文本的距离:vertical-align 4.text-decor ...
- 前端之CSS:属性操作2
css样式之属性操作 一.文本属性 1.text-align:cnter 文本居中2.line heigth 垂直居中 :行高,和高度对应3.设置图片与文本的距离:vertical-align4.te ...
- 了解JavaScript 对象的属性操作
提起操作, 很多人都会想到我们学习过程中最经常做的操作, 就是对数据库进行增, 删, 改, 查, 既然提到这个, 那么对于对象的属性操作也不例外, 基本上可以说也是这几个操作. JS中对象的属性标签 ...
- 深入理解javascript对象系列第二篇——属性操作
× 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...
- jQuery-1.9.1源码分析系列(八) 属性操作
jQuery的属性操作主要包括 jQuery.fn.val jQuery.fn.attr jQuery.fn.removeAttr jQuery.fn.prop jQuery.fn.removePro ...
- jQuery属性操作
jQuery 的属性操作的核心部分其实就是对底层 getAttribute().setAttributes()等方法的一系列兼容性处理 ...if ( notxml ) { name = name.t ...
- 利用@property实现可控的属性操作
利用@property实现可控的属性操作 Python中没有访问控制符, 不像java之类的 public class Person{ private int x public int getAge( ...
- js学习笔记2---HTML属性操作
1.HTML属性操作:读.写 属性名 属性值 2.属性读操作:获取.找到 a) 语法:元素.属性名 如:document.getElementById(“btn”).value; b) 字符串的连 ...
- jQuery源代码学习之八——jQuery属性操作模块
一.jQuery属性模块整体介绍 jQuery的属性操作模块分四个部分:html属性操作,dom属性操作,类样式操作,和值操作. html属性操作(setAttribute/getAttribute) ...
随机推荐
- 刷题总结——bzoj1725(状压dp)
题目: 题目描述 Farmer John 新买了一块长方形的牧场,这块牧场被划分成 N 行 M 列(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地. FJ ...
- 类 this指针 const成员函数 std::string isbn() const {return bookNo;}
转载:http://www.cnblogs.com/little-sjq/p/9fed5450f45316cf35f4b1c17f2f6361.html C++ Primer 第07章 类 7.1.2 ...
- 大逃杀(树上dp)
这道题和宝藏差不多吧,转移的时候比较麻烦的. 代码中分量很多种情况. h更新比较麻烦 这两幅图表示了双边更新中3,4连个h更新,下面比较好理解的吧. #include<cstring> # ...
- The Closest M Points BZOJ 3053
The Closest M Points [问题描述] 软工学院的课程很讨厌!ZLC同志遇到了一个头疼的问题:在K维空间里面有许多的点,对于某些给定的点,ZLC需要找到和它最近的m个点. (这里的距离 ...
- Java面试题集(二)
51.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1,写出程序. 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题. public class ThreadTest1 ...
- msp430入门学习44
msp430的其他十二 msp430入门学习
- R语言入门-画图(二)--heatmap
一.函数参数: pheatmap参数: treeheight_row #横有多长 treeheight_col #竖有多长 cluster_cols=FLASE #单一方向聚类,也就是只有一边有树状结 ...
- Virtualization基础
官方文档学习 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/pdf/Virtualization_G ...
- 王垠 :写给支持和反对《完全用Linux工作》的人们 ( 2004/8/26)
在一阵阵唾骂和欢呼声中,<完全用linux工作>被转载到了天涯海角.很多人支持我,也有很多人唾骂我.我不知道它是怎样流传到那么多地方,其实 我不知道它都被转到哪里去了…… 我知道现在这篇文 ...
- Codeforces 486D Valid Sets (树型DP)
题目链接 Valid Sets 题目要求我们在一棵树上计符合条件的连通块的个数. 满足该连通块内,点的权值极差小于等于d 树的点数满足 n <= 2000 首先我们先不管这个限制条件,也就是先考 ...