Java 10 Local Variable Advantage Inferencia de tipos?

pvpkiran:

Estoy tratando de entender Java variable local 10 Inferencia de tipos. Me parece entender lo que es, pero no veo ninguna ventaja de esto. Así que me preguntaba ¿cuál es la idea detrás de la introducción de esta característica. Estas son algunas de mis observaciones. Por favor, corríjanme si estoy mal aquí.

  1. Por ejemplo, (a diferencia de otros idiomas) no puedo simplemente declarar una variable como esto

    var abc;
    

    Necesito inicializarlo (pero no puede inicializar a cero). Así que no veo ninguna ventaja en absoluto.

  2. Uno de los otros argumentos de sierra que es que antes teníamos que declarar una variable de este tipo con sus tipos explícitos.

    Map<User, String> userChannels = new HashMap<>();
    

    Ahora puedo hacerlo de esta manera

    var userChannels = new HashMap<User, String>();
    

Con la actual IDE (como IntelliJ IDEA) y su apoyo a la finalización de código. No puedo pensar en ninguna ventaja añadida de que esto trae a la mesa (en este contexto).

Algunos de los otros puntos que había leído estaban

Código polimórfico no juega agradable con var.
Y también que no puedo utilizar para este tipo de var no denotable como clase anónima.

Teniendo en cuenta todo esto, ¿por qué fue necesaria la introducción de esta función? Por favor alguien puede aclarar si estoy perdiendo algo.

ricola:

Una de las razones es que hace su código más corto y más fácil de leer. Considere el siguiente ejemplo, donde usará la variable sólo una o dos veces después de la declaración.

ReallyLongClassNameBecauseBigEnterpriseProject reallyLongClassAbv = new ReallyLongClassNameBecauseBigEnterpriseProject(foo);
OtherAnnoyingLongClassName otherAnnoyingLongClassName = reallyLongClassAbv.getOtherAnnoyingLongClassName();

Si el nombre de la variable tiene el mismo nombre que la clase (o un nombre abreviado porque se puede deducir la clase por el contexto o por el constructor), seguido de la clase no añadir mucha información. Pero si se escribe

var reallyLongClassAbv = new ReallyLongClassNameBecauseBigEnterpriseProject(foo);
var otherAnnoyingLongClassName = reallyLongClassAbv.getOtherAnnoyingLongClassName();

Ya es más agradable y más rápido de leer, y puesto que ya tiene el nombre de la clase, que no pierda ninguna información. En una pequeña bonificación, los nombres de las variables están alineados incluso!
Se podría pensar que no hace una gran diferencia, pero en mi experiencia, he trabajado en proyectos completos de esas declaraciones y realmente deseé no tener que leer dos o tres veces el nombre de clase en cada declaración. La varpalabra clave podría aumentar el ratio de información / texto y hacer que el código menos detallado.

NOTA : para que quede claro, incluso con var, todavía se debe evitar dar nombres largos inútilmente a su clase, pero a veces no tienen la elección o se trata de otra biblioteca.


Como se ha dicho en los comentarios, usted podría tener un vistazo a la PEC para tener una respuesta más completa y las guías de estilo para la variable local Inferencia de tipos de Stuart Marks.


En una nota de humor: se puede comprobar aquí una sátira de cómo Enterprisify sus nombres de clases Java , o ejemplos reales como InstantiationAwareBeanPostProcessorAdapter .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=196019&siteId=1
Recomendado
Clasificación