2009-09-23 201 views
0

例如,當我有一個名爲;如何使Class.forName忽略小寫/大寫

'MonkeyBusiness'

我知道我可以使用Class.forName( 「MonkeyBusiness」)調用它;

但是當我使用Class.forName(「monkeyBusiness」)調用它時;或Class.forName(「monkeybusiness」); 它給了我例外;

異常在線程 「主要」 java.lang.NoClassDefFoundError:monkeyBusiness
(錯誤的名稱:NTX/GMD /服務/使用/ MonkeyBusiness)

是否有可能使用任何情況下,格式化字符串打電話了嗎?如果是這樣,怎麼樣?

+0

@Gerritt是對的。你唯一的選擇是用大寫或小寫的名字命名所有的類/包,然後在類名字符串中使用String.toUpperCase()或String.toLowerCase(),但這與Java編碼慣例幾乎相反:-P – 2009-09-23 13:34:24

回答

9

你不知道。

猴子猴子和猴子在Java中是三個完全不同的東西。

爲什麼你需要這樣的功能?根本問題可能是您不知道哪些類與您的應用程序相關。

你可以做兩件事。首先,有一個只使用小寫或CamelCase類名的內部約定。這樣,只要將您的搜索轉換爲適當的格式:Class.forName(className.toLowerCase())

其次,您可以對所有使用的類進行緩存,並從緩存中查找適當的名稱。只需以小寫名稱作爲關鍵字,並將真實姓名作爲值列表。

第三,但不建議,蠻力檢查所有組合。但是這會爲更長的名稱創建一個非常糟糕的縮放函數:2^n,用於n長度的名稱。

3

您可以編寫一個忽略大小寫的ClassLoader。 Java類加載器基本上只支持一種功能:客戶端可以說「這是一個字符串,請使用該名稱加載類」,ClassLoader會回覆「對不起,我不知道類」,或者「是的,這裏是類」。 ClassLoader如何實現這個行爲是否完成直到它的實現者。

+0

你有一個自定義ClassLoader的例子嗎? – Thys 2009-09-23 13:53:01

+0

http://www.google.de/search?q=java+"custom+classloader"+tutorial – 2009-09-23 14:11:08