黑马程序员技术交流社区
标题:
学习视频教程中遇到的一个关于反射的例子
[打印本页]
作者:
唐志兵
时间:
2012-6-9 20:03
标题:
学习视频教程中遇到的一个关于反射的例子
本帖最后由 唐志兵 于 2012-6-9 20:05 编辑
import java.lang.reflect.Field;
public class ReflectTest2 {
public static void main(String[] args) throws Exception {
changeString();
}
private static void changeString() throws Exception {
// TODO Auto-generated method stub
ReflectPoint rp = new ReflectPoint(5, 6);
Field[] fields = rp.getClass().getFields();
for (Field field : fields) {
if (field.getType() == String.class) {
//比较两份字节码是否相同,所以要用 == 而不用 equals
//问题在这里: field.getType和 field.getClass返回的都是Class,它们有什么区别呢?
String strOld = (String) field.get(rp);
怎么我把代码粘贴上来,前面的空格就没了呢,这样看太乱了。
String strNew = strOld.replace("b", "hi,");
field.set(rp, strNew);
}
}
System.out.println(rp);
}
}
class ReflectString {
public String str1 = "bhaoma";
public String str2 = "bnihao";
public String str3 = "bwobuhao";
public String toString() {
return str1 +":" + str2 + ":" + str3;
}
}
复制代码
作者:
信义明
时间:
2012-6-9 20:25
Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
而Class类实现了Type接口
field.getType()是返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
我在api里没有查到field有getClass()方法
作者:
梁小波
时间:
2012-6-9 20:27
首先。getType()是Field的对象的方法;也就是一个对象字段获得class字节码的方法!
而getClass()是对象获得字节码的方法;也就是field是没有getclass()的!
作者:
唐志兵
时间:
2012-6-9 20:28
那个 getClass()方法是继承而来的。
作者:
赵兵锋
时间:
2012-6-9 20:36
API:
public Class<?> getType()返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
返回:标识此对象所表示字段的声明类型的 Class 对象
public final Class<?> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。
实际结果类型是 Class<? extends |X|>,其中 |X| 表示清除表达式中的静态类型,该表达式调用 getClass。 例如,以下代码片段中不需要强制转换:
Number n = 0;
Class<? extends Number> c = n.getClass();
public class Main extends TT{
public String nn ;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
TT m = new Main();
System.out.println(m.getClass());//尽管其引用类型是TT,但其实际上是Main类型。即运行时类。
System.out.println(m.getClass().getField("nn"));
}
}
class TT{
public int nn;
}
复制代码
输出:
class Main
public java.lang.String Main.nn
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2