GTA5房产网站建设中,北京泵网站建设,塘沽软件开发,php 整个网站变量2019独角兽企业重金招聘Python工程师标准 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的#xff01; 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种#xff1a; a)Class.getDeclaredField(String name); 返回一个 Field 对象#x… 2019独角兽企业重金招聘Python工程师标准 首先必须明一点 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 stunew Student();stu.setId(1L);stu.setName(Josean);stu.setNo(201403185203344);stu.setCreatedate(new Date());try{Field property1stu.getClass().getDeclaredField(name);System.out.println(property1);//private java.lang.String com.cx.test.Student.nameField property3stu.getClass().getField(nickname);System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname//错误方法 getField系列方法只能获取公共字段//Field property2stu.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 stunew Student();stu.setId(1L);stu.setName(Josean);stu.setNo(201403185203344);stu.setCreatedate(new Date());stu.setNickname(copyman);Field property1stu.getClass().getDeclaredField(name);//System.out.println(property1);//out:private java.lang.String com.cx.test.Student.nameField property3stu.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 property2stu.getClass().getField(name);//System.out.println(property2);//会抛java.lang.NoSuchFieldExceptionField [] prFields4stu.getClass().getDeclaredFields();for(Field field:prFields4){System.out.println(field);System.out.println(field.equals(property1));//私有变量必须先设置Accessible为truefield.setAccessible(true);//获取用get类方法。System.out.println(field.get(stu));}//设置用set类方法property3.set(stu, 名字被我改了哈哈);System.out.println(stu.getNickname());}} 这个是控制台输出 copyman
private java.lang.Long com.cx.test.Student.id
false
1
private java.lang.String com.cx.test.Student.name
true
Josean
private java.util.Date com.cx.test.Student.createdate
false
Tue Mar 18 18:19:39 CST 2014
private java.lang.String com.cx.test.Student.no
false
201403185203344
public java.lang.String com.cx.test.Student.nickname
false
copyman
名字被我改了哈哈 是不是觉得很很简单呢 。 转载于:https://my.oschina.net/u/1407116/blog/209383