如何判断一个类中是否存在指定名字的字段 本帖最后由 caijixu02 于 2010-11-07 11:46:39 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 下面这个方法可以判断包括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; } public static void main (String []args) { String s=SS.class.getName(); //SS 为你要与之匹配的类名 System.out.println(s.substring(s.lastIndexOf(".")+1).indexOf("传进的需要匹配的参数")); }如果结果返回0则存在,返回-1不存在 to:houjin_cn 不喜欢用报错机制来判断to:cweijiaweil 看了你的代码,我笑了 如果有别的方法,当然尽量不使用异常机制来判断,如果没有别的方法,也只有靠异常机制了看API:getDeclaredField抛出: NoSuchFieldException - 如果找不到带有指定名称的字段。如果不存在的话,必然会出异常,你不catch异常来判断,还咋办? 如果不想用异常判断,可以用 getDeclaredFields()获得所有Field,然后遍历比较其名字与需要判定的变量名是否有一样的。如果有,则返回true.这个办法不用try catch,但是效率可能稍微低一些(未测试) 为什么要遍历? 直接getFiled,拿不到就不存在呗 我没学过反射·但是我觉得有个方法可以·先将传进来的类编译了·然后生成class文件·然后用IO来实现··查找字段·· class文件怎么个编码,不是很清楚,能服用IO读取,还真不是很清楚! 这个确实是个办法,可以参考cglib 我到认为这不是个办法 下面代码 我要找 "b" 的话 你说返回的是有还是没有呢?public class A{String a;public void T(){ String b;}} 当然是没有首先,所谓字段,就是属性,而不包括局部变量其次,.class文件会记录字段的名称和类型,而不会记录局部变量的名称,这也是很多反编译软件可以把字段还原而不能还原局部变量一样综上,我个人认为问题不大 关于timer得小问题 能给JLabel的显示的文字或图片添加侦听器吗? 如何获取一个文件的md5值 C# 非常简单的算法问题,但是想不明白请教各位。。。 Java编程思想(第三版),出售 .net客户端上传文件问题. 编译 提示错误:需要标志符,求解 JAVA换行的问题! 菜鸟学java(三):大家请看下面的代码,怎么回事? 总是出现java.lang.NoSuchMethodError错误,在线等待!~! netbeans JDialog 如何设置窗口大小 有个问题,表达能力不太好.麻烦大家进来看看 给我点建议 刚学完J2SE..
try{
return clz.getDeclaredField(fieldName)!=null;
}
catch(Exception e){
}
if(clz!=Object.class){
return existsField(clz.getSuperclass(),fieldName);
}
return false;
}
public static void main (String []args) {
String s=SS.class.getName(); //SS 为你要与之匹配的类名
System.out.println(s.substring(s.lastIndexOf(".")+1).indexOf("传进的需要匹配的参数"));
}如果结果返回0则存在,返回-1不存在
getDeclaredField
抛出:
NoSuchFieldException - 如果找不到带有指定名称的字段。如果不存在的话,必然会出异常,你不catch异常来判断,还咋办?
class文件怎么个编码,不是很清楚,能服用IO读取,还真不是很清楚!
我到认为这不是个办法 下面代码 我要找 "b" 的话 你说返回的是有还是没有呢?
public class A{
String a;
public void T(){
String b;
}
}
首先,所谓字段,就是属性,而不包括局部变量
其次,.class文件会记录字段的名称和类型,而不会记录局部变量的名称,这也是很多反编译软件可以把字段还原而不能还原局部变量一样综上,我个人认为问题不大