【问题标题】:Quick fix for Class.forName case issue [duplicate]Class.forName 案例问题的快速修复[重复]
【发布时间】:2013-10-09 20:17:54
【问题描述】:

我从 Java 中得到了这个非常(愚蠢的)错误

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: models/modelclass (wrong name: models/ModelClass)

所以我在命令行输入一个命令,我宁愿不输入正确的类名大小写。我想输入“modelclass”而不是“ModelClass”。

有没有办法解决这个问题?为什么会存在这个异常?!?

【问题讨论】:

  • 您为什么不想输入正确的大小写?
  • 为什么要使用大写字母?
  • 一种带有大写字母的类型。一个人不忽略标点规则只是因为一个人想要。

标签: java class classloader


【解决方案1】:

存在错误是因为标准 Java 类加载器对类名区分大小写。

三个选项:

  1. 忽略标准 Java 约定并将所有类命名为小写(不推荐,如果您正在寻找第三方类,也不可能)。
  2. 使用Google's Reflections Library 在您的类路径中查找类,对给定的输入进行不区分大小写的匹配,并使用您在 Class.forName() 调用中通过反射找到的类。
  3. #2 上的迭代:编写自己的类加载器,对类进行不区分大小写的搜索并加载所需的类。

【讨论】:

  • 不要鼓励这种行为 :-)
  • 我认为对于类名的不区分大小写搜索有一个有效的用例(我喜欢我的 IDE 这样做),但你说得对,跳过 Java 类命名约定不是一个好想法。
  • 好吧,另外,我的问题是,为什么标准的 Java 类加载器对类名区分大小写?可能有一个很好的理由,我只是好奇。
  • 我不确定它是否有意区分大小写。可能是 Java 正在从操作系统请求文件,操作系统(在您的情况下为 Windows)返回不区分大小写的匹配,然后 Java 对返回的类文件进行区分大小写的字符串比较,记录不匹配并抛出 NoClassDefFoundError .请参阅stackoverflow.com/questions/8105087/… 了解更多信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多