Si vous déclarez normalement l'instruction pour étendue et pour chaque instruction, ce sera comme suit. Puisqu'il n'est pas déclaré "final", il peut être réaffecté (les instructions normales "for" sont ignorées car la réaffectation est en principe essentielle).
List<Integer> intList = Arrays.asList(1, 2, 3, 4);
for(int i : intList) {
i = 0; //Peut être réécrit
}
intList.forEach(it -> {
it = 0; //Peut être réécrit
});
Dans cet article, nous réécrirons ces contenus sous une forme non réattribuable.
Vous pouvez le rendre "immuable" en le déclarant avec "final".
for(final int i : intList) {
i = 0; //Puisqu'il est déclaré définitif, il ne peut pas être réaffecté et une erreur de compilation se produit.
}
Vous pouvez rendre l'argument final
en spécifiant le type entre parenthèses comme indiqué ci-dessous.
intList.forEach((final int it) ->
it = 0; //Puisqu'il est déclaré définitif, il ne peut pas être réaffecté et une erreur de compilation se produit.
);
Pour le moment, l'argument peut être «final» même lors de son implémentation en tant que classe anonyme.
Consumer<Integer> finalConsumer = new Consumer<Integer>() {
@Override
public void accept(final Integer it) {
it = 0; //Puisqu'il est déclaré définitif, il ne peut pas être réaffecté et une erreur de compilation se produit.
}
};
Lors de la première publication de cet article, le titre et le contenu étaient "** Les index ne peuvent être rendus immuables que pour les instructions étendues dans les instructions for, étendues pour les instructions et forEach **", mais @ saka1029 l'a souligné. Comme vous pouvez le voir, c'était une erreur, j'ai donc complètement réécrit le titre et le contenu.
Merci d'avoir signalé @ saka1029.
Recommended Posts