黑马程序员技术交流社区
标题:
学习反射中Field类是遇到的问题
[打印本页]
作者:
孙国军
时间:
2012-5-1 00:48
标题:
学习反射中Field类是遇到的问题
import java.lang.reflect.Field;
class ReflectTest
{
public static void main(String[] args){
ReflectPoint rp=new ReflectPoint(3,8);
changeStringValue(rp);
System.out.println(rp);
}
private static void changeStringValue(Object obj) {
Field[] field=obj.getClass().getFields();
for(Field f:field){
if(f.getType()==String.class){ //因为返回的是同一个Class对象,所以使用"=="判断;
try {
String oldStr=(String)f.get(obj);
String newStr=oldStr.replace('b', 'a');
f.set(obj, newStr);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
class ReflectPoint {
private int x;
public int y;
public String str1="search";
public String str2="java";
public String str3="enum";
public ReflectPoint(int x, int y) {
super();
this.x = x;
this.y = y;
}
public String toString() {
return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
+ str3 + "]";
}
}
复制代码
捕获.PNG
(17.98 KB, 下载次数: 44)
下载附件
2012-5-1 00:47 上传
为什么,对象rp中的String类型的属性值没有改变啊??
作者:
张锐
时间:
2012-5-1 04:14
17行,a换b还是b换a?
作者:
袁冬梅
时间:
2012-5-1 05:45
String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
你的字符位置放错了,如果想换掉所有'a'的话,a字符应该在前面。其他的看下来,貌似都木有错误= =
作者:
邓飞飞
时间:
2012-5-1 06:01
01.import java.lang.reflect.Field;
02.
03.class ReflectTest
04.{
05.public static void main(String[] args){
06.ReflectPoint rp=new ReflectPoint(3,8);
07.changeStringValue(rp);
08.System.out.println(rp);
09.}
10.private static void changeStringValue(Object obj) {
11.
12.Field[] field=obj.getClass().getFields();
13.for(Field f:field){
14.if(f.getType()==String.class){ //因为返回的是同一个Class对象,所以使用"=="判断;
15.try {
16.String oldStr=(String)f.get(obj);
17.String newStr=oldStr.replace('b', 'a');//
你在这儿是把b换成a,但是你写String中的字符串一个包含b的都没有,所以没找要替换的目标当然就不变了。
18.f.set(obj, newStr);
19.} catch (IllegalArgumentException e) {
20.
21.e.printStackTrace();
22.} catch (IllegalAccessException e) {
23.
24.e.printStackTrace();
25.}
26.}
27.}
28.}
29.}
30.class ReflectPoint {
31.private int x;
32.public int y;
33.public String str1="search";
34.public String str2="java";
35.public String str3="enum";
36.public ReflectPoint(int x, int y) {
37.super();
38.this.x = x;
39.this.y = y;
40.}
41.public String toString() {
42.return "ReflectPoint [str1=" + str1 + ", str2=" + str2 + ", str3="
43.+ str3 + "]";
44.}
45.
46.}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2