MENÙ

La riflessione Java resa semplice

sommario

La riflessione Java resa semplice

GiavaDiriflessionePresentazione di una classe di utilità che consente di utilizzare facilmente l'API.

Cos'è la riflessione?

API di riflessionedenti,"java.lang.reflect” incluso nella confezione,
Si tratta di un'API che recupera informazioni come campi e metodi dalle classi Java.
Vengono utilizzate principalmente le seguenti classi.

  • java.lang.Class
  • java.lang.reflect.Constructor
  • java.lang.reflect.Method
  • java.lang.reflect.Field

riflessioneUtilizzando , è possibile creare classi o chiamare metodi senza doverli codificare direttamente.
Puoi creare un'istanza di classe da una stringa o eseguire un metodo.

Scrivendo le definizioni dei nomi delle classi e dei metodi in file esterni come XML, è possibile adattare dinamicamente l'applicazione ai cambiamenti nell'ambiente durante il runtime.
È anche un'API molto efficace per creare applicazioni altamente flessibili.


Scopo della riflessione

riflessionenon viene spesso utilizzato direttamente dagli utenti,
È ampiamente utilizzato in applicazioni web come Struts e framework come la mappatura O/R.

Ad esempio, quando si impostano automaticamente i dati di input della schermata Web sulle proprietà JavaBeans,
Viene utilizzato durante l'emissione di SQL che si aggiorna automaticamente in base alle proprietà JavaBeans.

Inoltre, sono disponibili funzioni come il caricamento dinamico e la registrazione dei plug-in che estendono la funzionalità all'avvio dell'applicazione.riflessioneCiò può essere facilmente ottenuto utilizzando .

Esecuzione del campione

Esegui l'esempio e sperimenta la programmazione in stile framework.

Qui usiamo la seguente classeriflessioneDimostra un utilizzo semplice dell'utilità.

Main.java...Classe da eseguire
BeanUtil.java...Classe di utilità di riflessione
FreeSoft.java...Utilizzato come riflessione in una classe che rappresenta il software libero.

●Se eseguito normalmente

System.out.println(“>>>Caso normale”);
FreeSoft freeSoft = nuovo FreeSoft();
freeSoft.setNome(“Chat&Messenger Chat e Messenger!!”);
freeSoft.showNome();
freeSoft.showPrice(0);

●Quando eseguito utilizzando la riflessione

System.out.println(“>>>Quando si utilizza la riflessione”);
//Crea un'istanza della classe FreeSoft
Oggetto invocaObject = BeanUtil.newInstance(“FreeSoft”);
//Imposta il valore nel campo del nome.
BeanUtil.setProperty(invokeObject, "nome" , “Chat&Messenger Chat e Messenger!!”);
// Esegue il metodo showName() di FreeSoft.
BeanUtil.invoke(invokeObject, “mostraNome”, nullo);
// Esegue il metodo showPrice() di FreeSoft.
// Se il metodo ha argomenti, devono essere passati come array di tipo Oggetto.
BeanUtil.invoke(invokeObject, “mostraprezzo”,nuovo Oggetto[]{nuovo Intero(0)});

●Risultati dell'esecuzione

I risultati dell'esecuzione sono gli stessi sia nel caso normale che quando si utilizza la riflessione.

>>> Caso normale

Nome del software: Chat&Messenger Chatta e messenger! !

Prezzo: 0 yen

>>> Quando si utilizza la riflessione

Nome del software: Chat&Messenger Chatta e messenger! !

Prezzo: 0 yen

Dettagli del metodo BeanUtil

nuova istanza

oggetto statico pubblico nuova istanza(String className) genera un'eccezione
Genera e restituisce un'istanza dalla stringa "className".

parametri:
nome della classe – Nome della classe completo
Valore di ritorno:
Una nuova istanza di un nome di classe completo
eccezione:
Eccezione

nuova istanza

oggetto statico pubblico nuova istanza(String className, Object[] argObj) genera un'eccezione
Genera e restituisce un'istanza dalla stringa "className".

parametri:
nome della classe – Nome della classe completo
argObj – Argomenti del costruttore
Valore di ritorno:
Una nuova istanza di un nome di classe completo
eccezione:
Eccezione

nuova istanza

oggetto statico pubblico nuova istanza(Class clazz) lancia un'eccezione
Genera e restituisce un'istanza dalla classe "clazz".

parametri:
clazz - classe
Valore di ritorno:
nuova istanza di clazz
eccezione:
Eccezione

nuova istanza

oggetto statico pubblico nuova istanza(Class clazz, Object[] argObj) genera un'eccezione
Genera e restituisce un'istanza dalla classe "clazz".

parametri:
clazz - classe
argObj – Argomenti del costruttore
Valore di ritorno:
nuova istanza di clazz
eccezione:
Eccezione

setProperty

vuoto pubblico statico setProperty(Object invokeObject, String fieldName, Object value) genera un'eccezione
Chiama il metodo setter del campo "fieldName" dell'oggetto "invokeObject" e memorizza il valore "value".

Se non esiste un metodo setter, il valore verrà impostato direttamente nel campo. Tuttavia, in questo caso, il modificatore di accesso della proprietà di destinazione deve essere pubblico.

parametri:
invocaOggetto – Oggetto da eseguire
campoNome – Nome della proprietà dell'oggetto da eseguire
valore – Valore da impostare
eccezione:
Eccezione – Si verifica la seguente eccezione.
InvocationTargetException – Se il metodo sottostante genera un'eccezione
IllegalAccessException – Questo oggetto Metodo è Java
Quando viene implementato il controllo dell'accesso alla lingua e non è possibile accedere al metodo sottostante
NoSuchMethodException – Se non viene trovato un metodo con il nome specificato

getProperty

oggetto statico pubblico getProperty(Oggetto invokeObject, String fieldName) genera un'eccezione
Chiama il metodo getter del campo fieldName dell'oggetto invokeObject per ottenere il valore.
Se non esiste un metodo getter, il valore verrà recuperato direttamente dal campo. Tuttavia, in questo caso, il modificatore di accesso della proprietà di destinazione deve essere pubblico.

parametri:
invocaOggetto – Oggetto da eseguire
campoNome – Nome della proprietà dell'oggetto da eseguire
Valore di ritorno:
Valore restituito dal metodo getter
eccezione:
Eccezione – Si verifica la seguente eccezione.
InvocationTargetException – Se il metodo sottostante genera un'eccezione
IllegalAccessException – Questo oggetto Metodo è Java
Quando viene implementato il controllo dell'accesso alla lingua e non è possibile accedere al metodo sottostante
NoSuchFieldException – Se non viene trovato un campo con il nome specificato

invocare

oggetto statico pubblico invocare(Oggetto invokeObject, String callMethod, Object[] argObjects) genera InvocationTargetException, IllegalAccessException, NoSuchMethodException
Esegue il metodo "callMethod" dell'oggetto "invokeObject".
Se è presente un valore restituito, può essere ottenuto come oggetto.

parametri:
invocaOggetto – Oggetto da eseguire
metodochiamata – Nome del metodo da eseguire
argObjects – Se sono presenti argomenti, passarli come un array di oggetti. Se non ci sono argomenti, passa null.
Valore di ritorno:
Valore restituito dall'esecuzione di "callMethod"
eccezione:
InvocationTargetException – Se il metodo sottostante genera un'eccezione
IllegalAccessException – Questo oggetto Metodo è Java
Quando viene implementato il controllo dell'accesso alla lingua e non è possibile accedere al metodo sottostante
NoSuchMethodException – Se non viene trovato un metodo con il nome specificato

findMethod

metodo statico pubblico findMethod(Object invokeObject, String callMethod, Object[] argObjects) genera NoSuchMethodException
Cerca il metodo "callMethod" dell'oggetto "invokeObject".

parametri:
invocaOggetto – Oggetto da eseguire
metodochiamata – Nome del metodo dell'oggetto da eseguire
argObjects – Se sono presenti argomenti, passarli come un array di oggetti. Se non ci sono argomenti, passa null.
Valore di ritorno:
Un oggetto Method che corrisponde alle condizioni dell'argomento specificate
eccezione:
NoSuchMethodException – Se non viene trovato alcun metodo corrispondente o se il nome è “” o “”

setField

vuoto pubblico statico setField(Object invokeObject, String fieldName, Object value) genera IllegalAccessException, NoSuchFieldException
Memorizza il valore "value" nel nome del campo "fieldName" dell'oggetto da eseguire "invokeObject".

parametri:
invocaOggetto – Oggetto da eseguire
campoNome – Nome del campo dell'oggetto da eseguire
valore – Valore da impostare
eccezione:
IllegalAccessException – Il campo su cui si basa l'oggetto specificato (o la sua sottoclasse o implementatore)
non è un'istanza della classe o dell'interfaccia che dichiara o se la conversione di unwrapping fallisce
NoSuchFieldException – Se non viene trovato un campo con il nome specificato

getField

oggetto statico pubblico getField(Oggetto invokeObject, stringa fieldName) genera IllegalAccessException, NoSuchFieldException
Ottiene il valore del nome del campo "fieldName" dell'oggetto da eseguire "invokeObject".

parametri:
invocaOggetto – Oggetto da eseguire
campoNome – Nome del campo dell'oggetto da eseguire
Valore di ritorno:
valore di ritorno
eccezione:
IllegalAccessException – Il campo su cui si basa l'oggetto specificato (o la sua sottoclasse o implementatore)
non è un'istanza della classe o dell'interfaccia che dichiara o se la conversione di unwrapping fallisce
NoSuchFieldException – Se non viene trovato un campo con il nome specificato

hasField

booleano statico pubblico hasField(Oggetto oggetto, String fieldName) genera un'eccezione
Controlla se l'oggetto 'oggetto' dichiara il nome del campo 'fieldName'.

parametri:
oggetto – Oggetto da ispezionare
campoNome – Nome del campo da verificare
Valore di ritorno:
vero se dichiarato
eccezione:
Eccezione

getAllFields

java.util.TreeSet pubblico statico getAllFields(Oggetto oggetto) lancia un'eccezione
parametri:
oggetto
Valore di ritorno:
eccezione:
Eccezione

getShortClassName

stringa statica pubblica getShortClassName(Oggetto Oggetto)
Ottiene il nome della classe non qualificato da un oggetto.

parametri:
oggetto
Valore di ritorno:

getShortClassName

stringa statica pubblica getShortClassName(Stringa nomeclasse)
Ottiene il nome della classe dal nome completo.

parametri:
nome della classe
Valore di ritorno:

getNomeCampo

stringa statica pubblica getNomeCampo(nomemetodo stringa)
Modificare il nome del campo dal nome del metodo. Deve essere conforme alle convenzioni JavaBeans.

parametri:
nomemetodo
Valore di ritorno:

isClassEsist

booleano statico pubblico isClassEsist(Stringa nomeclasse)
Verifica che il nome completo "className" sia un nome di classe esistente.

parametri:
nome della classe
Valore di ritorno:

getPropertyDescriptors

PropertyDescriptor statico pubblico[] getPropertyDescriptors(Oggetto oggetto) lancia IntrospectionException
Restituisce un PropertyDescriptor che contiene le informazioni sull'oggetto per "oggetto".

parametri:
oggetto
Valore di ritorno:
eccezione:
java.beans.IntrospectionException

Codice sorgente BeanUtil

  • URLをコピーしました!
sommario