Existe-t-il un auto
type de variable en Java comme vous l'avez 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 y a-t-il une auto? Sinon, y a-t-il un hack pour faire cela? Je fais référence à la nouvelle fonctionnalité de C ++ 11
Object
, donc pour certaines opérations, vous pouvez utiliserObject
où vous le souhaitezauto
.to_string
fonction de l'objet , et non l'objet réel en question, n'est-ce pas?Réponses:
Répondu avant la modification de la question :
Non, il n'y a pas de
auto
type de variable en Java. La même boucle peut être réalisée comme:Java a des variables locales, dont la portée est dans le bloc où elles ont été définies. Similaire à C et C ++, mais il n'y a pas de mot clé auto ou register. Cependant, le compilateur Java ne permettra pas l'utilisation d'une variable locale non explicitement initialisée et donnera une erreur de compilation (contrairement à C et C ++ où le compilateur ne donnera généralement qu'un avertissement). Gracieuseté: Wikipedia .
Non, il n'y a pas d'inférence de type traditionnelle en Java comme C ++. Il y avait un RFE mais celui-ci a été fermé comme "Ne résoudra pas", la raison invoquée était:
la source
Object
) ne peuvent pas être faites comme ça. Ce n'est pas vraiment une bonne réponse, cela ne fonctionne que parce que l'exemple de la question est faible.auto
C et pré-C ++ 11. Votre modification est hors sujet.var
c'est un mot-clé réservé depuis Java 9.Peut-être que Java 10 a ce que vous (et moi) voulons, grâce au
var
mot - clé.À partir des propositions d'amélioration JDK 286
Mise à jour: Oui, cette fonctionnalité a été intégrée à la version Java 10!
la source
var
n'est pas un mot-clé! Du JLS : "var n'est pas un mot-clé, mais plutôt un identifiant avec une signification spéciale comme le type d'une déclaration de variable locale". Ainsi, contrairement aux mots-clés, rien ne vous empêche d'appeler une variable ou une méthode "var".var
n'est en effet pas dans la liste des mots-clés.Java 7 introduit la syntaxe du diamant
Par rapport à l'ancien java
Le lecteur critique remarquera que cette nouvelle syntaxe n'aide pas à écrire les boucles for dans la question d'origine. Cela semble correct et tout à fait intentionnel. Voir l'autre réponse qui cite la base de données de bogues d'Oracle.
la source
auto integerBox = new Box<Integer>();
HashMap<String, LinkedList<Operation, Set<Integer>>>
Dans Java 8, vous pouvez utiliser l'inférence de type lambda pour éviter de déclarer le type. L'analogue aux exemples de l'interrogateur serait:
qui peuvent également être simplifiés à l'aide de références de méthode:
la source
En bref, non, il n'y a pas de type automatique. Si tout ce que vous faites est d'imprimer la valeur, vous pouvez simplement vous référer à la valeur comme un
Object
.la source
hashCode
s, ou collecter des noms de classes, ou ... vous avez l'idée;) La liste est cependant courte. Voir la documentation de la classe Object (commentaire destiné aux débutants, je suis sûr que vous le saviez SimonC)Ce n'est pas une solution Java pure, cependant l'ajout d'une bibliothèque appelée lombok permettra à la magie ci-dessous de compiler et de fonctionner de manière très similaire au
auto
mot-clé en C ++la source