Java 10 Type de variable locale Inference Avantage?

pvpkiran:

Je suis en train de comprendre Java 10 Type de variable locale Inference. Je crois comprendre ce qu'elle est, mais je ne vois aucun avantage de cette situation. Alors je me demandais quelle est l'idée derrière l'introduction de cette fonctionnalité. Ce sont quelques-unes de mes observations. S'il vous plaît me corriger si je me trompe.

  1. Par exemple, (contrairement à d'autres langues) Je ne peux pas simplement déclarer une variable comme celui-ci

    var abc;
    

    Je dois l'initialiser (mais ne peut pas initialiser null). Je ne vois donc pas vraiment un avantage quelconque.

  2. L'un des autres arguments que j'ai vu est que précédemment, nous avons dû déclarer une variable comme celui-ci avec ses types explicites.

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

    Maintenant, je peux le faire comme ça

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

Avec moderne IDE (IDEA IntelliJ comme) et leur soutien à la complétion de code. Je ne peux pas penser à tout avantage que cela apporte à la table (dans le contexte ci-dessus).

Certains que je lis des autres points ont été que

Le code polymorphique ne joue pas bien avec var.
Et aussi je ne peux pas utiliser var pour les types non denotable comme classe Anonymous.

Compte tenu de tout cela, pourquoi était-il nécessaire d'introduire cette fonction? Quelqu'un peut-il préciser s'il vous plaît Si je manque quelque chose ici.

Ricola:

L'une des raisons est que cela rend votre code plus court et plus facile à lire. Prenons l'exemple suivant, où vous utiliserez la variable qu'une seule fois ou deux fois après la déclaration.

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

Si le nom de la variable a le même nom que la classe (ou un nom raccourci parce que vous pouvez déduire la classe par le contexte ou par le constructeur), le nom de classe ne pas ajouter beaucoup d'infos. Mais si vous écrivez

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

Il est déjà plus agréable et plus rapide à lire, et puisque vous avez déjà le nom de la classe, vous ne perdez pas d' info. Sur un petit bonus, vos noms de variables sont même alignés!
Vous pourriez penser que cela ne fait pas une grande différence, mais dans mon expérience, j'ai travaillé dans des projets pleins de ces déclarations et j'ai vraiment souhaité que je ne devais pas lire deux ou trois fois le nom de la classe à chaque déclaration. Le varmot - clé pourrait augmenter le rapport d' informations / texte et rendre votre code moins bavard.

REMARQUE : pour le rendre clair, même avec var, vous devriez toujours éviter de donner des noms longs à votre inutilement classe, mais parfois vous n'avez pas le choix ou il vient d' une autre bibliothèque.


Comme il est indiqué dans les commentaires, vous pouvez jeter un oeil à l' JEP d'avoir une réponse plus complète et les lignes directrices de style pour le type Variable locale Inférence par Stuart Marks.


Sur une note humoristique: vous pouvez vérifier ici une satire de comment Enterprisify vos noms de classes Java , ou des exemples concrets comme InstantiationAwareBeanPostProcessorAdapter .

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=196017&siteId=1
conseillé
Classement