Je joue avec le JShell et en essayant de convertir une variable à sa forme originale. Pour ce faire, je remis à zéro tout en utilisant REPL /r
, je java.util.*
et importé créé une liste:Convertir la variable à sa forme originale en JShell
-> import java.util.*;
-> List<String> l = new ArrayList<>(Arrays.asList("a", "b"));
| Modified variable l of type List<String> with initial value [a, b]
Maintenant, je suis en train de convertir les valeurs listes en majuscules, donc je fais:
-> l.replaceAll(String::toUpperCase)
-> l
| Variable l of type List<String> has value [A, B]
Listing la source exécutée que j'ai tapé à l'aide /list
(ou /l
) montre:
-> /l
1 : List<String> l = new ArrayList<>(Arrays.asList("a", "b"));
2 : l.replaceAll(String::toUpperCase)
3 : l
maintenant, lorsque je tente de réinitialiser la liste à stade 1 (avant de changer ses valeurs), je reçois la déclaration import
:
-> /1
import java.util.*;
Est-ce que quelqu'un sait pourquoi cela se produit? J'ai essayé la même chose sans l'instruction import
, mais j'obtiens le même résultat (je suppose que c'est parce qu'il est importé explicitement).
Je viens de remarquer que si j'écris /l all
je reçois:
-> /l all
s1 : import java.util.*;
s2 : import java.io.*;
s3 : import java.math.*;
s4 : import java.net.*;
s5 : import java.util.concurrent.*;
s6 : import java.util.prefs.*;
s7 : import java.util.regex.*;
s8 : void printf(String format, Object... args) { System.out.printf(format, args); }
1 : String a = "a";
2 : a = "b"
Je ne sais pas pourquoi /1
exécute la première instruction import
et pas d'abord l'affectation des strings. Aussi c'est vraiment bizarre que même si import java.util.*;
est là, s5
est import java.util.concurrent.*;
(ce qui est clairement redondant).
/ Ré-exécute cet extrait. Il ne réinitialise pas l'exécution à ce stade. –