2011-08-12 22 views
11

¿Cuál es la mejor práctica para implementar/proporcionar getters/setters para una clase que contiene un mapa?Getters/setters de una clase con un mapa

La aplicación más común que veo es:

public class MyClass { 

    private Map<String, String> myMap; 
    public getMyMap() { /* Return an unmodifiable map */ } 
    public setMyMap(Map<String, String> myMap) { ... } 
} 

O sería mejor proporcionar una interfaz como:

public getMyMap() { /* Return a modifiable map */ } 
public addToMap(String key, String value) { myMap.put(key, value); } 

Y por qué es tal método mejor?

+0

Siempre trataré de usar la segunda opción siempre que sea posible, pero donde tienes que exponer getters/setters javabean a veces no tienes otra opción. – sMoZely

+7

Depende únicamente de lo que representa el mapa (por lo tanto, los requisitos funcionales). Esto generalmente debe documentarse en la clase y/o los métodos. No hay una respuesta real a esto. – BalusC

Respuesta

9

Ambos tienen sus usos. Los métodos expuestos por una clase deben tener un nivel adecuado de abstracción. Por ejemplo, si la clase es un registro de los perros respaldados por un Map<String, Dog>, entonces se podría proporcionar métodos como:

void addDog(String name, Dog dog); 
Dog findByName(String name); 

Si es decir un motor de reglas que permite a los clientes especificar todo el conjunto de reglas en una llamada, a continuación, podría exponer métodos como:

void setRules(Map<String, Rule> rules); 
Map<String, Rule> getRules(); 
-4

Me gustaría proporcionar uno. Algo así como ...

public Map<String,String> getMyMap() 
{ 
    return myMap; 
} 

y cuando desea utilizar entonces

myClass.getMyMap().put(key,value); 

RENUNCIA: Yo no compilar este y probar esta respuesta;)

3

En general yo diría que probar no devolver el mapa en absoluto. Tener un método que toma la clave y devuelve el valor. Tomar un mapa está bien, siempre que lo copie, pero un método que tome la clave/valor y lo ponga en el mapa sería mi preferencia.

Si debe devolver el mapa, debe devolver una versión de solo lectura o una copia. Un método establecido también debe copiar el mapa.

Es una mala idea permitir que los llamantes muten los datos dentro de una clase sin que la clase sepa, pasar o retener datos mutables es una mala idea.

Cuestiones relacionadas