2009-09-23 6 views
0

Par exemple lorsque j'ai une classe nommée;Comment faire pour Class.forName ignorer minuscules/majuscules

'MonkeyBusiness'

Je sais que je peux l'appeler à l'aide Class.forName ("MonkeyBusiness"); Mais quand je l'appelle en utilisant Class.forName ("monkeyBusiness"); ou Class.forName ("monkeybusiness"); cela me donne l'exception;

Exception dans le thread "principal" java.lang.NoClassDefFoundError: monkeybusiness
(nom incorrect: NTX/GMD/services/usage/MonkeyBusiness)

Est-il possible d'appeler à l'aide d'une chaîne formatée cas? Si c'est le cas, comment?

+0

@Gerritt a raison. Votre seul choix serait de nommer toutes vos classes/packages en majuscules ou en minuscules, puis d'utiliser String.toUpperCase() ou String.toLowerCase() sur la chaîne de nom de classe, mais cela va à l'encontre de toutes les conventions de codage Java :-P –

Répondre

9

Ce n'est pas le cas.

Singe singe et MONKEY sont trois choses totalement différentes en Java.

Pourquoi avez-vous besoin d'une telle fonction? Le problème racine peut être que vous ne savez pas quelles classes sont pertinentes dans votre application.

Il y a deux choses que vous pouvez faire. Tout d'abord, avoir une convention interne que vous utilisez uniquement des noms de classe en minuscules ou CamelCase. De cette façon, il suffit de convertir votre recherche au format approprié: Class.forName (className.toLowerCase())

Ensuite, vous pouvez créer un cache de toutes les classes utilisées et rechercher le nom approprié dans le cache. Faites simplement une liste avec le nom minuscule comme clé et le nom réel comme valeur.

Troisièmement, mais non recommandé, force brute vérifier toutes les combinaisons. Mais cela crée une fonction de mise à l'échelle terriblement mauvaise pour les noms plus longs: 2^n, pour les noms de longueur n.

3

Vous pouvez écrire un ClassLoader qui ignore la casse. Java ClassLoaders ne supporte qu'une fonction: un client peut dire "Voici une chaîne, chargez la classe avec ce nom", et le ClassLoader répond "Désolé, je ne connais pas la classe" ou "Oui, voici le classe". Comment ClassLoader implémente ce comportement est complet jusqu'à son implémenteur.

+0

Avez-vous un exemple de ClassLoader personnalisé? – Thys

+0

http://www.google.de/search?q=java+"custom+classloader"+tutorial –

Questions connexes