创建文件名不区分大小写的java类实例

创建文件名不区分大小写的java类实例,java,string,naming-conventions,Java,String,Naming Conventions,目前我有以下方法来实例化对象。我正在从一个文件中读取类名及其大写形式。(我可以假设不会有很多类,如Abc.java、Abc.java或Abc.java,并且只有一个类的名称按给定顺序包含a、b、c字母) 例如,有一个名为SchoolPrincipal的java类,该类在文件中表示为SchoolPrincipal,因此由于大写问题,当前我的以下方法找不到该对象,它给出了ClassNotFoundException 我不能重命名java类,它应该保持标准,并且也不能更改文件中大写的单词。有没有一个棘

目前我有以下方法来实例化对象。我正在从一个文件中读取类名及其大写形式。(我可以假设不会有很多类,如
Abc.java
Abc.java
Abc.java
,并且只有一个类的名称按给定顺序包含a、b、c字母)

例如,有一个名为
SchoolPrincipal
的java类,该类在文件中表示为
SchoolPrincipal
,因此由于大写问题,当前我的以下方法找不到该对象,它给出了
ClassNotFoundException

我不能重命名java类,它应该保持标准,并且也不能更改文件中大写的单词。有没有一个棘手的方法来解决这个问题

我有一个解决方案,我想知道这个方案的好坏, 获取所有java类的名称并存储在一个映射中,其中键都是大写的
(键:CLASSTEACHER,值:CLASSTEACHER)
,当我从文件中读取名称时,我在映射中搜索它,获取值并将类名传递给下面的方法

public Object getInstance(String packageName, String className)

        String unifiedClassName = packageName + "." + className;
        LOG.info("Creating " + unifiedClassName + " instance...");

        Class<?> clazz = null;
        Constructor<?> ctor = null;
        Object obj = null;

        try {

            clazz = Class.forName(unifiedClassName);
            ctor = clazz.getConstructor();
            obj = ctor.newInstance();

        } catch (InstantiationException e) {
            LOG.error("Error occurred: " + e);
        }
 }
public对象getInstance(字符串packageName,字符串className)
字符串unifiedClassName=packageName+“+”className;
LOG.info(“创建”+unifiedClassName+“实例…”);
类clazz=null;
构造函数=null;
objectobj=null;
试一试{
clazz=Class.forName(unifiedClassName);
ctor=clazz.getConstructor();
obj=ctor.newInstance();
}捕获(实例化异常e){
日志错误(“发生错误:+e”);
}
}

有趣的问题。。。我认为,如果采用这种方法,主要的挑战实际上是获取类路径中所有可用的类(我认为这仍然比尝试所有2^N个名称组合更有效)

也许您已经熟悉类路径扫描,所以您省略了它,因为它很明显?我在考虑类似的事情,或者寻找其他进行扫描的第三方(例如spring或JUnit)


无论如何,这将是一条有趣的线索:)

我认为你从错误的角度看待问题。有那么多的课程你不能手工改变它们的案例吗?如果是这样,请编写一个简单的程序,遍历源文件夹,并使用正确大小写的文件名为您生成一个新文件。您可以使用所有可能的选项执行
Class.forName
调用。或者循环浏览该包中的文件,找到一个同名的文件。不确定您想做什么,但听起来不是一个很好的概念。@NeoMime相应的类在一个包中,有1000到5个类thousands@Bubletan是的,这就是我想做的。为什么这不是一个好概念?@IsuruGunawardana好吧,我的意思是这样做的原因。我不知道这背后的整个系统,但如果可能的话,其他一些方法可能会更好。相应的类在一个包中,有1000到5000个类