2011-10-21 20 views
7

Me gustaría crear una clase base que amplíe todas las clases de mi programa. Una cosa que quería hacer era encontrar una forma uniforme de almacenar todas las variables de instancia dentro del objeto.¿Usa un HashMap para almacenar variables de instancia?

Lo que he encontrado es utilizar un HashMap para almacenar los pares clave/valor para el objeto y luego exponer esos valores a través de un método de obtención y configuración.

El código que tengo para esto hasta ahora es la siguiente:

package ocaff; 

import java.util.HashMap; 

public class OcaffObject { 

    private HashMap<String, Object> data; 

    public OcaffObject() { 
     this.data = new HashMap<String, Object>(); 
    } 

    public Object get(String value) { 
     return this.data.get(value); 
    } 

    public void set(String key, Object value) { 
     this.data.put(key, value); 
    } 

} 

Si bien funcionalmente esto funciona, tengo curiosidad si hay ningún problema real con esta implementación o si hay una forma mejor de hacer ¿esta?

En mi día a día soy programador de PHP y mi objetivo era imitar la funcionalidad que utilicé en PHP en Java.

+0

Seguro, puedes hacer esto. – Coffee

+3

Usted * podría * hacer eso, pero ¿por qué? Si desea pasar un mapa hash, simplemente pase alrededor de un mapa hash. Sin embargo, pierdes los beneficios si pierdes mucho de lo que OOP es si simplemente arrojas todo en un mapa. –

Respuesta

13

No creo que esta sea una buena manera de lidiar con lo que quiere decir. La programación en Java es bastante diferente a la programación en php, desde mi punto de vista.

Necesita mantener las cosas limpias y fuertemente tipadas, utilizando el paradigma real de la programación orientada a objetos limpios.

Algunos problemas con esta técnica vienen a mi mente, aquí hay algunos, no en orden de importancia.

  1. primer problema que tenga con esto es el rendimiento y la huella de memoria: esto va a consumir una gran cantidad de memoria y llevará a cabo muy mal.

  2. El segundo problema es la concurrencia, HashMap no es seguro para subprocesos.

  3. El tercer problema es el tipo de seguridad: ya no tiene seguridad de tipo, puede escribir en un campo lo que quiera y nadie lo está verificando, un anti-patrón real.

  4. Cuarto problema es la depuración ... será difícil depurar el código.

  5. El quinto problema es que todos pueden escribir y leer cualquier campo sabiendo su nombre.

  6. Sexto problema: cuando cambia el nombre de un campo en el conjunto de hash, no obtiene ningún tipo de error de tiempo de compilación, solo obtiene un comportamiento extraño en tiempo de ejecución. Refactorizar será imposible.

Los campos mecanografiados son mucho más útiles y limpios.

+2

+1 Me gusta su lista de problemas. Particularmente creo que 3, 4, 5 y 6 son más importantes que 1 y 2, pero incluso esos 2 son importantes para tener en cuenta. – corsiKa

+0

Sí, estoy de acuerdo, los últimos puntos son más importantes :) pero el rendimiento puede ser un problema cuando esta es una clase base para usuarios de clase, por ejemplo, y tienes 1000000 usuarios en línea :) jaja :) –

+0

Este es exactamente el tipo de información que yo tenía buscando. Me alegro de haberlo preguntado antes de avanzar demasiado en mi proyecto. Gracias. –

1

Si se toma el tiempo de hacer una clase para esto, simplemente agregaría lo que necesita como miembros de la clase. Esto le dará tiempo de compilación de los miembros de su clase, reduciendo en gran medida sus errores sutiles.

Cuestiones relacionadas