2015-08-02 12 views
5

Ho letto che, al fine di accedere all'oggetto chiamata che rappresenta un tipo primitivo, posso fare questo:Accesso oggetto chiamata che rappresenta un tipo primitivo

Class intClass = int.class; 

Ma come tipi primitivi hanno classi per rappresentare loro? Sono primitivi, il che dovrebbe significare che non hanno classe. Perché l'esempio sopra funziona e quale classe contiene int (classe Integer forse)?

risposta

7

Come il javadoc per le Class Stati classe

istanze della classe Class rappresentano classi e interfacce in un esecuzione di applicazioni Java. Un enum è un tipo di classe e un'annotazione è un tipo di interfaccia. Ogni array appartiene anche a una classe che è riflessa come un oggetto Class condiviso da tutti gli array con lo stesso tipo di elemento e numero di dimensioni. tipi primitivi Java (boolean, byte, char, short, int, long, float, e double), e la parola chiave void sono rappresentati anche come Class oggetti.

Un oggetto Class fornisce semplicemente alcuni metodi di metadati e di fabbrica per il tipo che rappresenta.

Ad esempio, Class#isPrimitive() indica se il tipo rappresentato è una primitiva.

La classe Class e le sue istanze sono, tra l'altro, utilizzate per la riflessione.

Diciamo che avete avuto la una classe come

public class Example { 
    public long add(int first, long second) { // for whatever reason 
     return first + second; 
    } 
} 

e di voler richiamare il metodo add, dato solo il suo nome e il tipo di parametro. Di seguito fallirebbe

Class<?> exampleClass = Example.class; 
exampleClass.getMethod("add", Integer.class, Long.class); 

perché i tipi di parametri non sono Integer e Long, sono int e long.

Avresti per fare qualcosa di simile

Class<Example> exampleClass = Example.class; 
Method addMethod = exampleClass.getMethod("add", int.class, long.class); 
Example instance = exampleClass.newInstance(); 
addMethod.invoke(instance, 42, 58L); 
4

Se si esamina il sommario del campo per la classe Integer, si scoprirà che il tipo primitivo int è rappresentato dall'istanza di classe TYPE. Pertanto, int.class equivarrebbe allo Integer.TYPE.

Ecco un collegamento a Javadocs dove è possibile trovare l'istanza della classe TYPE.

+0

si può dare un link per un buon tutorial sulla riflessione che spiegano questo concetto? – karim

+1

Se segui questo percorso su Oracle riceverai molte informazioni utili: https://docs.oracle.com/javase/tutorial/reflect/ – deezy

0

Quando si digita int.class si ottiene la classe di wrapper oggetto corrispondente, che ha ogni primitivo. Leggi lo Java tutorials on autoboxing per ulteriori informazioni e per vedere la corrispondente classe di wrapper di ogni primitiva.

Problemi correlati