J'ai une fabrique qui crée des objets de classe MyClass, renvoyant ceux déjà générés lorsqu'ils existent. Comme j'ai la méthode de création (getOrCreateMyClass) en prenant plusieurs paramètres, quel est le meilleur moyen d'utiliser une carte pour stocker et récupérer les objets?Mise en cache d'objets construits avec plusieurs paramètres
Ma solution actuelle est la suivante, mais cela ne me semble pas trop clair. J'utilise la méthode hashCode (légèrement modifiée) de la classe MyClass pour construire un int basé sur les paramètres de la classe MyClass, et je l'utilise comme clé de la Map.
import java.util.HashMap;
import java.util.Map;
public class MyClassFactory {
static Map<Integer, MyClass> cache = new HashMap<Integer, MyClass>();
private static class MyClass {
private String s;
private int i;
public MyClass(String s, int i) {
}
public static int getHashCode(String s, int i) {
final int prime = 31;
int result = 1;
result = prime * result + i;
result = prime * result + ((s == null) ? 0 : s.hashCode());
return result;
}
@Override
public int hashCode() {
return getHashCode(this.s, this.i);
}
}
public static MyClass getOrCreateMyClass(String s, int i) {
int hashCode = MyClass.getHashCode(s, i);
MyClass a = cache.get(hashCode);
if (a == null) {
a = new MyClass(s, i);
cache.put(hashCode , a);
}
return a;
}
}
Cela me semble bien. Pourquoi ne l'aimez-vous pas? – skaffman
Eh bien, ça ne me semble pas trop orienté objet, et j'ai actuellement un bug inconnu avec une usine comme ça, mais peut-être que le problème n'est pas dans ce code ... – cdarwin
désolé, j'ai oublié une ligne! ! (ceci était un exemple de code), en corrigeant cache.put – cdarwin