黑马程序员技术交流社区
标题:
关于反射的一点问题
[打印本页]
作者:
丶小天
时间:
2014-2-20 11:41
标题:
关于反射的一点问题
import java.lang.reflect.*;
public class ReflectTest {
public static void main(String[] args) throws Exception{
Book bk1 = new Book("java program","yellow","qing hua da xue chu ban she",345);
Field[] fields = bk1.getClass().getFields();
for(Field field:fields){
if(field.getType() == String.class){
String oldValue = (String)field.get(bk1);
String newValue = oldValue.replace('a', 'l');
field.set(bk1,newValue);
}
}
System.out.println(bk1);
}
}
class Book {
String name;
String color ;
String chubanshe ;
int page;
Book(String name, String color, String chubanshe,int page) {
this.name = name;
this.color = color;
this.chubanshe = chubanshe;
this.page = page;
}
public String toString() {
return "Book:name=" + name + ",\r\ncolor=" + color + ", \r\nchubanshe="
+ chubanshe + ",\r\npage="+page;
}
}
复制代码
上面这段代码修改字符串没有成功 请高手解释一下为什么?
作者:
___________゛M
时间:
2014-2-20 13:24
import java.lang.reflect.Field;
public class My
{
public static void main(String[] args) throws Exception
{
Book bk1 = new Book("java program", "yellow",
"qing hua da xue chu ban she", 345);
Field[] fields = bk1.getClass().getDeclaredFields();
for (Field field : fields)
{
if (field.getType() == String.class)
{
String oldValue = (String) field.get(bk1);
String newValue = oldValue.replace('a', 'l');
field.set(bk1, newValue);
}
}
System.out.println(bk1);
}
}
class Book
{
String name;
String color;
String chubanshe;
int page;
Book(String name, String color, String chubanshe, int page)
{
this.name = name;
this.color = color;
this.chubanshe = chubanshe;
this.page = page;
}
public String toString()
{
return "Book:name=" + name + ",\r\ncolor=" + color + ", \r\nchubanshe="
+ chubanshe + ",\r\npage=" + page;
}
}
复制代码
Field[] fields = bk1.getClass().getDeclaredFields(); 这个地方你用错方法了, 应该用这一个 。 多查api文档 ,
下面是不是你要的结果 .
Book:name=jlvl progrlm,
color=yellow,
chubanshe=qing hul dl xue chu bln she,
page=345
替换掉其中的a。
作者:
↑↓ME→←
时间:
2014-2-20 14:17
String name;
String color;
String chubanshe;
int page;
你这个没加修饰符,默认是default修饰类型的,而用getFileds()是取出public的属性
,
getDeclaredFields()是取出非public类型的属性
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2