No se puede acceder directamente a las propiedades privadas, es necesario romper la encapsulación (las deficiencias de la reflexión), setAccessible (verdadero)
Caso de prueba
publicclassUser{
publicint id;private String name;
String address;protectedint sno;publicUser(){
}publicUser(int id, String name, String address,int sno){
super();this.id = id;this.name = name;this.address = address;this.sno = sno;}@Overridepublic String toString(){
return"User [id="+ id +", name="+ name +", address="+ address +", sno="+ sno +"]";}@OverridepublicinthashCode(){
finalint prime =31;int result =1;
result = prime * result +((address == null)?0: address.hashCode());
result = prime * result + id;
result = prime * result +((name == null)?0: name.hashCode());
result = prime * result + sno;return result;}@Overridepublicbooleanequals(Object obj){
if(this== obj)returntrue;if(obj == null)returnfalse;if(getClass()!= obj.getClass())returnfalse;
User other =(User) obj;if(address == null){
if(other.address != null)returnfalse;}elseif(!address.equals(other.address))returnfalse;if(id != other.id)returnfalse;if(name == null){
if(other.name != null)returnfalse;}elseif(!name.equals(other.name))returnfalse;if(sno != other.sno)returnfalse;returntrue;}}
import java.lang.reflect.Field;publicclassReflectTest{
publicstaticvoidmain(String[] args)throws Exception {
Class usrClass= Class.forName("com.lzj.reflect.pojo.User");// 获取对象
Object object = usrClass.newInstance();// 获取属性
Field field = usrClass.getDeclaredField("id");// 赋值
field.set(object,34);// 获取属性值
System.out.println(field.get(object));/*
* 访问私有属性
* 无法直接访问,抛出IllegalAccessException异常
* 需要打破封装
*/
Field field2 = usrClass.getDeclaredField("name");// 打破封装
field2.setAccessible(true);
field2.set(object,"lzj");
System.out.println(field2.get(object));}}