目前我有以下方法來實例化對象。我正在從文件中讀取類名,並使用大寫字母。 (我可以假設不會有像Abc.java
,ABC.java
或aBc.java
這樣的許多類,並且將只有一個類,其名稱包含a,b,c給定順序的字母)。創建具有文件名大小寫的java類實例不敏感
作爲一個例子有一名爲SchoolPrincipal
Java類此類文件爲SCHOOLPRINCIPAL
中表示目前所以我下面的方法無法找到該對象由於大寫問題,它給ClassNotFoundException
。
我不能重命名java類,它應該與標準保持一致,而且我也無法更改大寫文件中的單詞。有沒有一個棘手的方法來解決這個問題。
而且我有一個解決方案,並想知道在這個解決方案的好壞, 獲取所有的Java類名和存儲在一個地圖,關鍵是所有大寫(key: CLASSTEACHER, Value: ClassTeacher)
,當我從文件中讀取我的名字在地圖中搜索並獲取值並將className傳遞給以下方法。
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);
}
}
我認爲你從接近您的問題一個錯誤的觀點。有很多課程你不能親自改變他們的案例嗎?如果是這樣,請製作一個簡單的程序,通過源文件夾並使用正確的文件名爲您生成一個新文件。 – NeoMime
您可以使用所有可能的選項執行'Class.forName'調用。或者遍歷該包中的文件並找到一個具有相同名稱的文件。不知道你想要做什麼,但聽起來不是一個非常好的概念。 – Bubletan
@NeoMime相應的類在一個包中,並且有一千到五千個類 –