String.describeConstable în Java

Metode din API-ul de constante (java.lang.constant): un String își este singur propria descriere.

Sintaxă
Optional<String> describeConstable()
String resolveConstantDesc(MethodHandles.Lookup lookup)

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[].