本帖最后由 caijixu02 于 2010-11-07 11:46:39 编辑

解决方案 »

  1.   

    下面这个方法可以判断包括private型的字段和超类的字段 public static boolean existsField(Class clz,String fieldName){
    try{
    return clz.getDeclaredField(fieldName)!=null;
    }
    catch(Exception e){
    }
    if(clz!=Object.class){
    return existsField(clz.getSuperclass(),fieldName);
    }
    return false;
    }
      

  2.   


    public static void main (String []args) {
    String s=SS.class.getName();  //SS 为你要与之匹配的类名
    System.out.println(s.substring(s.lastIndexOf(".")+1).indexOf("传进的需要匹配的参数"));
    }如果结果返回0则存在,返回-1不存在
      

  3.   

    to:houjin_cn 不喜欢用报错机制来判断to:cweijiaweil 看了你的代码,我笑了
      

  4.   

    如果有别的方法,当然尽量不使用异常机制来判断,如果没有别的方法,也只有靠异常机制了看API:
    getDeclaredField
    抛出: 
    NoSuchFieldException - 如果找不到带有指定名称的字段。如果不存在的话,必然会出异常,你不catch异常来判断,还咋办?
      

  5.   

    如果不想用异常判断,可以用 getDeclaredFields()获得所有Field,然后遍历比较其名字与需要判定的变量名是否有一样的。如果有,则返回true.这个办法不用try catch,但是效率可能稍微低一些(未测试)
      

  6.   

    为什么要遍历? 直接getFiled,拿不到就不存在呗
      

  7.   

    我没学过反射·但是我觉得有个方法可以·先将传进来的类编译了·然后生成class文件·然后用IO来实现··查找字段··
      

  8.   


    class文件怎么个编码,不是很清楚,能服用IO读取,还真不是很清楚!
      

  9.   

    这个确实是个办法,可以参考cglib
      

  10.   


    我到认为这不是个办法  下面代码 我要找 "b" 的话 你说返回的是有还是没有呢?
    public class A{
    String a;
    public void T(){
     String b;
    }
    }
      

  11.   

    当然是没有
    首先,所谓字段,就是属性,而不包括局部变量
    其次,.class文件会记录字段的名称和类型,而不会记录局部变量的名称,这也是很多反编译软件可以把字段还原而不能还原局部变量一样综上,我个人认为问题不大