您这问题出现的根本原因是权限问题 , FieldDemo 你这类的3个属性都是缺省权限 即 是protected 权限
该权限如果不通过暴力反射方式 即 用 .getDeclaredFields()方法是无法获取字段的 只要做点小小的修改就OK
Field[] fields = obj.getClass().getFields();
这修改成 fields = obj.getClass().getDeclaredFields();即OK
package cn;
import java.lang.reflect.Field;
public class FieldTest
{
public static void main(String[] args) throws Exception
{
FieldDemo fd = new FieldDemo();
replacetest(fd);
System.out.println(fd);
}
private static void replacetest(Object obj)throws Exception{
//你的属性值是protected 反射的时候必须要使用暴力反射 打开反射权限
// Field[] fields = obj.getClass().getFields();
Field[] fields = obj.getClass().getDeclaredFields();
for(Field field : fields){
if(field.getType() == String.class){
String oldvalue = (String)field.get(obj);
String newvalue = oldvalue.replace('b','a');
field.set(obj,newvalue);
}
}
}
}
class FieldDemo
{
String str1 = "ball";
String str2 = "basketball";
String str3 = "itcast";
public String toString(){
return "str1"+"-->"+str1+"\n"+"str2"+"-->"+str2+"\n"+"str3"+"-->"+str3+"\n";
}
}
|