求NoSuchFieldException的解决方法。

wwhui 2009-10-08 06:29:30
在使用class.getField("username")时,由于类中不存在username属性,所以报NoSuchFieldException错误。
请问有什么方法可以在之前判断该类中是否存在该属性?

谢谢!
...全文
2710 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
国产大和尚 2009-10-08
  • 打赏
  • 举报
回复
getDeclaredFields
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
国产大和尚 2009-10-08
  • 打赏
  • 举报
回复
getDeclaredFields
public Field[] getDeclaredFields()
throws SecurityException返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。
WindAndStorm 2009-10-08
  • 打赏
  • 举报
回复
反射是不错的方法,支持楼上的。
chenyi19880918 2009-10-08
  • 打赏
  • 举报
回复
楼上说的对
快乐的2 2009-10-08
  • 打赏
  • 举报
回复
使用getDeclaredFields()得到所有field然后使用field的getName方法获得field的名称,让你要判断的和从类中获取的变量名对比就可以了。
loveofmylife 2009-10-08
  • 打赏
  • 举报
回复
用Class对象调用getDeclaredFields() 返回一个Field数组(包括该类声明的所有字段,包括私有的),然后便利这个数组查找是否有你所说的那个字段
swandragon 2009-10-08
  • 打赏
  • 举报
回复
得到所有属性
Field fields[] = class.getDeclaredFields();
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 在Java编程中,java.lang.NoSuchFieldException属于运行时异常。当尝试访问或操作某个类的字段,但该字段在该类及其超类中都不存在时,就会抛出此异常。这通常意味着在编译时存在的字段在运行时找不到了,可能是因为类加载问题、版本不匹配、代码混淆或动态类型改变等原因导致的。 当通过Class对象的getField()或getDeclaredField()方法获取特定字段时,若字段不存在于指定类的继承链上,就会抛出NoSuchFieldException。比如,访问的字段访问权限不足(如私有、受保护或默认访问权限),或者字段名称拼写错误,或者运行时加载的类与编译时的类不一致等情况,都可能引发该异常。 处理这个异常的方法有:一是检查字段名称,确保其大小写和拼写正确,因为Java是区分大小写的;二是考虑访问权限问题,若字段是私有或受保护的,需确保有合适的访问权限,但将字段改为public可能违背封装原则;三是确认运行时加载的类与编译时引用的类一致,检查类名和版本是否匹配;四是使用getDeclaredField()方法来查找私有或受保护的字段,它能查找所有字段,而getField()只能查找公共字段;五是检查类的继承结构,确保字段存在于正确的类或超类中;六是避免代码混淆导致字段被重命名或删除,确保混淆配置中保留关键字段;七是在访问字段时添加异常处理代码,捕获NoSuchFieldException并给出错误信息,便于调试。 以下是示例代码: 了解NoSuchFieldException的含义及处理方法对编写稳健的Java代码很重要。遇到此异常时,应先检查代码逻辑,再逐步排查问题,确保正确访问和使用字段。良好的编程习惯和充分的测试有助于避免此类异常,提升代码的稳定性和可维护

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧