HOWTO · Java

Come ispezionare la classe runtime di un oggetto in Java

Scopri come usare getClass(), getSimpleName() e getTypeName() per esaminare la classe runtime di un oggetto Java, distinta dal tipo dichiarato della variabile.

In questa pagina

Usa getClass() per esaminare la classe runtime di un oggetto non nullo. Non rivela il tipo dichiarato della variabile. Chiama getSimpleName() per ottenere il nome della classe senza il relativo package, oppure getTypeName() per un nome di tipo come java.lang.String.

Usare getClass().getSimpleName() per esaminare la classe runtime di un oggetto in Java

Chiama getClass() su un oggetto per ottenere il relativo oggetto Class<?>, poi chiama getSimpleName() per ricavare il nome della classe senza le informazioni sul package. Il risultato riflette la classe runtime dell’oggetto, anche quando la variabile è dichiarata come Object.

Esegui questo esempio:

public class RuntimeSimpleNames {
  public static void main(String[] args) {
    Object value = "Hello, Java!";
    String[] names = {"Ada", "Lin"};
    int count = 3;
    Object boxedCount = count;

    System.out.println(value.getClass().getSimpleName());
    System.out.println(names.getClass().getSimpleName());
    System.out.println(boxedCount.getClass().getSimpleName());
  }
}
String
String[]
Integer

Gli array sono oggetti, quindi anche su di essi puoi usare getClass(); un valore String[] ha il nome semplice String[]. Un tipo primitivo come int non dispone del metodo getClass(). Assegnandolo a un Object, Java lo converte tramite boxing in un Integer: la classe riportata è quindi Integer, non int.

Usare getClass().getTypeName() per esaminare la classe runtime di un oggetto in Java

getTypeName() restituisce il nome del tipo come String. Per un oggetto String, include il nome del package, a differenza di getSimpleName().

Esegui questo esempio:

public class RuntimeTypeName {
  public static void main(String[] args) {
    Object value = "Hello, Java!";
    String typeName = value.getClass().getTypeName();
    System.out.println(typeName);
  }
}
java.lang.String

Entrambi i metodi partono da un oggetto non nullo e ne riportano la classe runtime. Scegli getSimpleName() quando basta il nome breve della classe; usa getTypeName() quando è utile il nome del tipo completo di package. Nessuno dei due metodi determina il tipo dichiarato di una variabile.

Conclusione

Usa getClass().getSimpleName() per ottenere un nome di classe conciso e getClass().getTypeName() per un nome di tipo che include le informazioni sul package. Questi metodi si applicano agli oggetti, compresi gli array. Prima di esaminare un valore primitivo, convertilo tramite boxing; ricorda che il risultato è la classe wrapper, per esempio Integer per un int.