A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐志兵 于 2012-6-9 20:05 编辑
  1. import java.lang.reflect.Field;


  2. public class ReflectTest2 {
  3. public static void main(String[] args) throws Exception {
  4. changeString();
  5. }

  6. private static void changeString() throws Exception {
  7. // TODO Auto-generated method stub
  8. ReflectPoint rp = new ReflectPoint(5, 6);
  9. Field[] fields = rp.getClass().getFields();

  10. for (Field field : fields) {
  11. if (field.getType() == String.class) {
  12. //比较两份字节码是否相同,所以要用 == 而不用 equals
  13. //问题在这里:   field.getType和 field.getClass返回的都是Class,它们有什么区别呢?  
  14. String strOld = (String) field.get(rp);


  15. 怎么我把代码粘贴上来,前面的空格就没了呢,这样看太乱了。
  16. String strNew = strOld.replace("b", "hi,");
  17. field.set(rp, strNew);
  18. }
  19. }
  20. System.out.println(rp);
  21. }
  22. }

  23. class ReflectString {
  24. public String str1 = "bhaoma";
  25. public String str2 = "bnihao";
  26. public String str3 = "bwobuhao";


  27. public String toString() {
  28. return str1 +":" + str2 + ":" + str3;
  29. }
  30. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
而Class类实现了Type接口
field.getType()是返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型。
我在api里没有查到field有getClass()方法
回复 使用道具 举报
首先。getType()是Field的对象的方法;也就是一个对象字段获得class字节码的方法!
而getClass()是对象获得字节码的方法;也就是field是没有getclass()的!
回复 使用道具 举报
那个 getClass()方法是继承而来的。
回复 使用道具 举报
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();
  1. public class Main extends TT{
  2.         public String nn ;
  3.         public static void main(String[] args) throws SecurityException, NoSuchFieldException {
  4.                 TT m = new Main();
  5.                 System.out.println(m.getClass());//尽管其引用类型是TT,但其实际上是Main类型。即运行时类。
  6.                 System.out.println(m.getClass().getField("nn"));
  7.         }
  8. }
  9. class TT{
  10.         public int nn;
  11. }
复制代码
输出:
class Main
public java.lang.String Main.nn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马