Creer todo el libro como ningún valor en libros de la optimización del código enumeración Adquirida

1 Antecedentes

De acuerdo con el desarrollo real de una propiedad para obtener valores de enumeración enumeradas son muy comunes.

Se define como una enumeración:

@Getter
public enum CoinEnum {
    PENNY(1), NICKEL(5), DIME(10), QUARTER(25);
 
    CoinEnum(int value) {
        this.value = value;
    }
 
    private final int value;
}

El desarrollo actual a menudo tienen que obtener el objeto de la enumeración basada en el valor de valor.

Entonces, ¿cómo hacerlo?

 

 

2 codificación

2.1 redacción es muy baja

El trabajo tendrá que ver a través de switch de los casos o si-else lograr el acceso a enumerar de acuerdo a una propiedad.

Tal enfoque similar a la siguiente:

public static CoinEnum getEnum(int value) {
    switch (value) {
        case 1:
            return PENNY;
        case 5:
            return NICKEL;
        case 10:
            return DIME;
        case 25:
            return QUARTER;
        default:
            return null;
    }
}

El mayor problema es que si una constante de enumeración de estos enfoques para añadir, borrar, modificar, por lo que la necesidad de modificar la función correspondiente, el acoplamiento es muy alta.

No cumple con el principio de apertura y cierre (on-off principio: abierta a la expansión, pero cerrado para la modificación).

Además, si las constantes de enumeración están trazando más fácilmente los errores, a finales difícil de mantener.

 

2.2 Mejora

Podemos utilizar una función de los valores estáticos para obtener partido de clase de enumeración array enumerado, escribir una versión de las mejoras en el código:

public static CoinEnum getEnum(int value) {
    for (CoinEnum coinEnum : CoinEnum.values()) {
        if (coinEnum.value == value) {
            return coinEnum;
        }
    }
    return null;
}

 

Seguida de la enumeración constantes necesitan modificar esta mejora, la función no necesitan cambiar, obviamente, mucho mejor que antes.

La redacción es también muy común en el lugar de trabajo.

Entonces, ¿qué hay margen de mejora?

La redacción aunque muy bueno, pero cada vez que el objeto debe atravesar la enumeración para obtener un array enumerado una vez, la complejidad de tiempo es O (n).

Reducir la complejidad del tiempo de cómo hacerlo? Una idea común es el espacio por el tiempo .

 

2.3 Optimización de nuevo

Puede ser utilizado para mapear caché, el valor del mapa cuando se utiliza directamente.

Puede ser optimizado:

@Getter
public enum CoinEnum {
    PENNY(1), NICKEL(5), DIME(10), QUARTER(25);
 
    CoinEnum(int value) {
        this.value = value;
    }
 
    private final int value;
 
    public int value() {
        return value;
    }
 
    private static final Map<Integer, CoinEnum> cache = new HashMap<>();
 
    static {
        for (CoinEnum coinEnum : CoinEnum.values()) {
            cache.put(coinEnum.getValue(), coinEnum);
        }
    }
 
    public static CoinEnum getEnum(int value) {
        return cache.getOrDefault(value, null);
    }
}

Mediante la optimización de lo anterior, el uso de la complejidad de tiempo es O (1), el rendimiento ha mejorado.

El desarrollo actual de los estudiantes puede adoptar un enfoque de este tipo no es demasiado.

La razón principal es mucho más similar a la del artículo en línea , que es mucho amor a Baidu para resolver los problemas de las razones importantes para resolver el problema del progreso del estudiante no está pensando pequeña .

 

el aprendizaje de toda la vida 2.4

Mediante la optimización de los dos anteriores, el código del acoplamiento se reduce, el rendimiento se incrementó.

Por lo tanto, puede una perfecta llamar a un día?

NO...

2.3 da el código todavía algunos problemas:

  • Cada clase de enumeración tendrá que escribir código como este, es engorroso.

  • Muchos clase de enumeración proporciona la introducción de la herramienta, aunque sólo sea constante de enumeración, dará lugar a la ejecución del bloque de código estático.

No hay opciones más elegantes?

Espero que puedan pensar, teniendo en cuenta sus propias soluciones.

Vea las soluciones específicas de aprendizaje correcto "Ali Baba Java Development Manual" columna detallada de la sección 10 de clase de enumeración

 

3 resumen

Desde la elección de la programación de este camino, espero que antes de hacer preguntas, antes de Baidu, lo primero que debe tener su propio pensamiento.

Cuando la comunidad escolar para reclutar y contratar, por muchas compañías grandes cara muy atractiva, pero no es muy útil para la mayoría de la gente. Debido a que muchos cara solamente se someta ninguna respuesta, mucha gente va a buscar respuestas a recitar, pero la naturaleza de muchos de los llamados respuesta estándar no reveló el problema, no es completa, ni tampoco es la mejor respuesta.

Creer todo el libro como ningún libro, espero que esté leyendo, viendo el blog, ver las columnas de procesar más atención a la cuestión de pensamiento, métodos de aprendizaje, pero recuerda conocimientos específicos. Como dice el refrán, "Dale a un hombre un pez, como delegado para los peces", espero que esto puede inspirar a más amigos que dan cuenta de la importancia de pensar y métodos.

 

----------

Si cree que este artículo te ha ayudado, bienvenido pulgar hacia arriba, comentario, reenvío (atribución), la atención, el apoyo es la mayor fuerza motriz de mi trabajo.

Publicados 379 artículos originales · ganado elogios 862 · Vistas 1,32 millones +

Supongo que te gusta

Origin blog.csdn.net/w605283073/article/details/103519048
Recomendado
Clasificación