例如,当我有一个名为;
的类时'MonkeyBusiness'
我知道我可以使用Class.forName(“MonkeyBusiness”);
来调用它但是当我使用Class.forName(“monkeyBusiness”)调用它时;或Class.forName(“monkeybusiness”); 它给了我例外;
线程“main”中的异常java.lang.NoClassDefFoundError:monkeyBusiness
(错误的名称:ntx / gmd / services / usage / MonkeyBusiness)
是否可以使用任何大小写格式的字符串调用它?如果是这样,怎么样?
答案 0 :(得分:9)
你没有。
Monkey Monkey和MONKEY在Java中完全不同。
为什么需要这样的功能?根本问题可能是您不知道哪些类与您的应用程序相关。
你可以做两件事。首先,有一个内部约定,你只使用小写或CamelCase类名。这样,只需将搜索转换为适当的格式:Class.forName(className.toLowerCase())
其次,您可以对所有使用的类进行缓存,并从缓存中查找相应的名称。只需创建一个列表,其中小写名称为键,实名为值。
第三,但不推荐,强力检查所有组合。但是这会为较长的名称创建一个非常糟糕的缩放函数:2 ^ n,对于n长度名称。
答案 1 :(得分:4)
您可以编写忽略大小写的ClassLoader。 Java ClassLoaders基本上只支持一个函数:客户端可以说“这是一个字符串,请加载具有该名称的类”,而ClassLoader要么回答“抱歉,我不知道这个类”,或者“是的,这里是类”。 ClassLoader如何实现此行为已完成,直到其实现者。