Je me demande si j'utilise trop la réflexion java.
J'ai une classe qui est un détenteur de données pour un couple de cartes. J'ai des méthodes get (...) publiques qui, en donnant une clé en entrée, renvoient la valeur associée à celle-ci dans la carte correspondante.
Étant donné que les cartes sont volumineuses, je les charge uniquement lorsque je veux réellement y accéder. Donc, dans chaque méthode get (...), je vérifie si la carte est nulle. Si c'est le cas, j'appelle la méthode loadMap (..) correspondante.
Voici un exemple de code snippetJava: surutilisation de la réflexion?
public getId(String name)
{
try
{
if(nameMap1 == null)
loadNameMap1();
} catch(...) {....}
return nameMap1.getId(name);
}
Le problème est que je dispose de plusieurs cartes. Donc, pour charger chaque carte, j'ai une méthode loadMap (..) différente et le bloc try catch dans les méthodes get (...). Donc, au lieu de cela, j'ai écrit une méthode appelée loadMap (Object map, String methodName) qui utilise la réflexion pour appeler la méthode appropriée et gère toutes les exceptions.
private synchronized void loadMap(Object map, String methodName)
{
if (map == null)
try
{
Method method = this.getClass().getDeclaredMethod(methodName, new Class[0]);
method.invoke(this, new Object[0]);
}
catch (..)
}
Est-ce que j'utilise trop la réflexion ici? Y a-t-il une meilleure manière de faire cela? Est-ce que qualifie comme une « utilisation limitée de la réflexion », comme écrit dans Effective Java by Joshua Bloch
(Note: Je ne peux pas factoriser la classe en plusieurs classes)
"Je ne peux pas refactoriser la classe en plusieurs classes". Et pourquoi est-ce que? Vous pouvez garder l'interface courante à l'extérieur, mais l'implémentation peut être refactorisée (en utilisant une interface MapLoader), non? – Thilo
@Thilo: Je n'ai aucun contrôle sur la conception. – athena
Si vous n'avez aucun contrôle sur la conception, comment pouvez-vous décider d'utiliser la réflexion? Il est certain que l'ajout de classes internes privées (c'est-à-dire les détails d'implémentation) n'entrent pas en conflit avec la conception des choses. – Thilo