黑马程序员技术交流社区
标题:
继续反射
[打印本页]
作者:
陈文杰
时间:
2013-11-19 00:54
标题:
继续反射
反射机制和反射一样的么。
作者:
RuntimeError!
时间:
2013-11-19 04:30
反射就是用定义好的一种方法来获取一个类内部组成的一种方法,能让我们更明确的使用一种类,或者完成一个正常调用完成不了的一些事。
例如这段代码 就可以修改对象X中的private的值。。
Field fieldX=pt1.getClass.getDeclaredField(x);
fieldX.setAccessible(true);
复制代码
还有把一个对象的类中所有的字符串中的一个字母改成另外的字母,只对这个对象有效
import java.lang.reflect.Field;
/**
* 作业:将任意一个对象中的所有String类型的成员变量所对应的
* 字符串内容中的“b”改成“a”。
* @author yupengfei
*
*/
public class ReflectHomework
{
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException
{
RefPoint pt1 = new RefPoint(9);
RefPoint pt2 = new RefPoint(5);
changeStrValue(pt1);
System.out.println(pt1);
//这里试着看别的成员变量的字符串是否被更改
System.out.println(pt2);
}
private static void changeStrValue(Object obj) throws IllegalArgumentException, IllegalAccessException
{
Field[] fields = obj.getClass().getFields();
for(Field field : fields)
{
//这里用 == 因为是字节码比较,所以用等号比较好
if(field.getType() == String.class)
{
String strValue = (String)field.get(obj);
String newValue = strValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
}
class RefPoint
{
int x = 3;
public String str1 = "basic";
public String str2 = "babyGo!";
public String str3 = "lalala";
public RefPoint(int x)
{
this.x=x;
}
@Override
//用于分割显示每个字符串
public String toString()
{
return str1 + ":" +str2+":" + str3;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2