Come fai a sapere un tipo di variabile in java?

Diciamo che dichiaro una variabile:

String a = "test"; 

E voglio sapere di che tipo si tratta, cioè, l’output dovrebbe essere java.lang.String Come faccio a fare questo?

 a.getClass().getName() 

Se vuoi il nome, usa il metodo di Martin. Se vuoi sapere se si tratta di un’istanza di una certa class:

boolean b = a instanceof String

Ho imparato dal motore di ricerca (il mio inglese è pessimo, quindi codice …) come ottenere il tipo di variabile? UPS :

 String str = "test"; String type = str.getClass().getName(); value: type = java.lang.String 

questo metodo :

 str.getClass().getSimpleName(); value:String 

ora esempio:

 Object o = 1; o.getClass().getSimpleName(); value:Integer 

Mi piacerebbe espandere la risposta di Martin lì …

La sua soluzione è piuttosto carina, ma può essere ottimizzata in modo tale che qualsiasi “tipo variabile” possa essere stampato in quel modo. (In realtà è un tipo di valore, più sull’argomento ). Non tanto ottimizzato quanto indica una possibilità.

La sua soluzione era:

 a.getClass().getName() 

Se vuoi che funzioni con qualcosa puoi farlo:

 ((Object) myVar).getClass().getName() //OR ((Object) myInt).getClass().getSimpleName() 

In questo caso, la primitiva sarà semplicemente avvolta in un wrapper. In questo caso otterrai l’object del primitivo.

Io stesso l’ho usato così:

 private static String nameOf(Object o) { return o.getClass().getSimpleName(); } 

Uso di Generics:

 public static  String nameOf(T o) { return o.getClass().getSimpleName(); } 

Utilizzare la funzione di sovraccarico dell’operatore di java

 class Test { void printType(String x) { System.out.print("String"); } void printType(int x) { System.out.print("Int"); } // same goes on with boolean,double,float,object ... } 

Sono d’accordo con ciò che ha detto Joachim Sauer, non è ansible sapere (il tipo di variabile! Non il tipo di valore!) A meno che la variabile non sia un attributo di class (e tu debba recuperare i campi di class, ottenere il campo corretto per nome …)

In realtà per me è assolutamente imansible che qualsiasi a.xxx().yyy() ti dia la risposta giusta poiché la risposta sarebbe diversa sullo stesso identico object, in base al contesto in cui tu chiami questo metodo …

Come ha detto teehoo, se sai di compilare un elenco definito di tipi da testare puoi usare instanceof ma otterrai anche sottoclassi che restituiscono true …

Una ansible soluzione sarebbe anche quella di ispirare te stesso dall’implementazione di java.lang.reflect.Field e creare la tua propria class Field , e quindi dichiarare tutte le tue variabili locali come questa implementazione Field personalizzata … ma è meglio trovare un’altra soluzione , mi chiedo davvero perché hai bisogno del tipo di variabile e non solo del tipo di valore?

Penso che abbiamo più soluzioni qui:

  • instace di potrebbe essere una soluzione.

Perché? In Java ogni class viene ereditata dalla class Object stessa. Quindi se hai una variabile e vorresti conoscere il tipo che funzionerà.

  • System.out.println (((Object) f) .getClass () getName ().);

o

  • Integer.class.isInstance (1985); // dà vero

o

  • isPrimitive ()

     public static void main(String[] args) { ClassDemo classOne = new ClassDemo(); Class classOneClass = classOne(); int i = 5; Class iClass = int.class; // checking for primitive type boolean retval1 = classOneClass.isPrimitive(); System.out.println("classOneClass is primitive type? = " + retval1); // checking for primitive type? boolean retval2 = iClass.isPrimitive(); System.out.println("iClass is primitive type? = " + retval2); } 

Questo ci darà

  1. FALSE
  2. VERO

scopri di più qui: come determinare il tipo primitivo di una variabile primitiva?

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

http://docs.oracle.com/cd/E26806_01/wlp.1034/e14255/com/bea/p13n/expression/operator/Instanceof.html