170 votes

Existe-t-il une inférence automatique en Java?

Existe-t-il un type de variable auto en Java comme en C ++?

Un exemple:

 for ( auto var : object_array)
    std::cout << var << std::endl;

for( auto var : object_array)
    var.do_something_that_only_this_particular_obj_can_do();
 

Je sais qu’il existe une boucle for améliorée en Java, mais existe-t-il une auto? Si non, y a-t-il un bidouillage à faire? Je fais référence à la nouvelle fonctionnalité de C ++11

71voto

The New Idiot Points 23130

Réponse avant la question a été MODIFIÉ :

Non, il n'est pas d' auto type de variable en Java. La même boucle peut être atteint que:

for ( Object var : object_array)
  System.out.println(var);

Java a des variables locales, dont le champ est dans le bloc où elles ont été définies. Similaire à C et C++, mais il n'y a pas d'auto ou d'inscrire un mot clé. Cependant, le compilateur Java ne permettra pas l'utilisation d'un non-explicitement-initialisé la variable locale et donnera une erreur de compilation (contrairement au C et C++ le compilateur ne peut donner un avertissement). Avec L'Aimable Autorisation De Wikipedia.

Non, il n'est pas tout intégrer l'inférence de type en Java comme en C++ . Il y avait une RFE mais c'était fermé comme "ne Va pas s'arranger", la raison donnée était :

Les humains bénéficier de la redondance de la déclaration de type de deux façons. Tout d'abord, le redondante de type sert de précieux documents aux lecteurs de ne pas avez à la recherche pour la déclaration de getMap() pour savoir de quel type il les rendements. Deuxièmement, la redondance permet au programmeur de déclarer la destinée type, et ainsi bénéficier d'une croix vérification effectuée par le compilateur.

28voto

Tarrasch Points 2869

Java 7 introduit la syntaxe en diamant

 Box<Integer> integerBox = new Box<>(); // Java 7
 

Par rapport au vieux java

 Box<Integer> integerBox = new Box<Integer>(); // Before Java 7
 

Le lecteur critique remarquera que cette nouvelle syntaxe n'aide pas à écrire les boucles for de la question d'origine. C'est correct et totalement intentionnel semble-t-il. Voir l’autre réponse qui cite la base de données de bogues d’Oracle.

8voto

SimonC Points 4079

En bref, non, il n'y a pas de type auto. Si tout ce que vous faites est d’imprimer la valeur, vous pouvez simplement vous référer à la valeur en tant que Object .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X