Ce face String.describeConstable
Java 12 a adăugat API-ul java.lang.constant, folosit de unelte care generează sau analizează bytecode (compilatoare, biblioteci de tip ASM). Acolo, o valoare constantă poate fi descrisă (Constable) și o descriere poate fi rezolvată înapoi în valoare (ConstantDesc).
Un String este simultan valoare și descriere. describeConstable() returnează Optional.of(this), iar resolveConstantDesc(lookup) returnează chiar șirul. În programele obișnuite nu vei apela aceste metode; ele există ca String să poată fi folosit în acest API alături de Integer, ClassDesc și altele.
Parametri
| Parametru | Descriere |
|---|---|
lookup |
Contextul de căutare (MethodHandles.lookup()); ignorat pentru String. |
Ce returnează
describeConstable: un Optional care conține șirul. resolveConstantDesc: șirul însuși.
Exemple
Exemplul 1: Descriere și rezolvare
import java.lang.invoke.MethodHandles;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
String oras = "Iași";
Optional<String> desc = oras.describeConstable();
System.out.println(desc);
String inapoi = oras.resolveConstantDesc(MethodHandles.lookup());
System.out.println(inapoi);
System.out.println(inapoi == oras);
}
}
Rezultat
Optional[Iași]
Iași
true
Exemplul 2: String printre alte constante
Și Integer, Double sunt ConstantDesc; o listă de descrieri poate amesteca tipurile.
import java.lang.constant.ConstantDesc;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<ConstantDesc> constante = List.of("Ana", 21, 9.5);
for (ConstantDesc c : constante) {
System.out.println(c + " -> " + c.getClass().getSimpleName());
}
}
}
Rezultat
Ana -> String
21 -> Integer
9.5 -> Double
Greșeli frecvente
- Cauți în aceste metode o funcție utilă pentru text obișnuit. Nu fac nimic cu textul; sunt pentru unelte care lucrează cu bytecode.
Comenzi înrudite
String: Clasa pentru text în Java: un șir de caractere care nu se mai poate modifica după ce a fost creat.String.valueOf: Transformă orice valoare (număr, boolean, char, obiect, char[]) în String; copyValueOf face un șir dintr-un char[].