Tutorial Java Reflection: crea Java POJO utilizza l'API Reflection per ottenere ClassName, DeclaredFields, ObjectType, SuperType e altro...
Pubblicato: 2019-06-10
Il modo migliore a livello di codice per ottenere tutti i campi di classe dichiarati in Java utilizzando le API Reflection
In questo tutorial scriverò per primo un semplice Java POJO ed eseguirò tutti gli esempi di Java Reflection su POJO. Devi aver sentito parlare del termine POJO. Che cos'è Plain Old Java Object
?
Inoltre, se hai domande di seguito, sei nel posto giusto:
- java – Come creare un POJO?
- java – Crea semplici classi POJO
- Oggetti Java vecchi semplici (POJO) in Java
- Introduzione a POJO (Plain Old Java Object)
- Progettazione della classe POJO
- Crea la prima persona di classe POJO Java
Un POJO
è solo un semplice Java Bean
con le restrizioni rimosse. I Java Bean devono soddisfare i seguenti requisiti:
- Segui la convenzione Bean di
getFoo
(oisFoo
per i booleani) e i metodisetFoo
per un attributo mutabile chiamato foo; lasciare fuori setFoo se foo è immutabile. - Costruttore
no-arg
predefinito - Deve implementare
java.io.Serializable
POJO non autorizza nessuno di questi. È proprio quello che dice il nome: un oggetto che viene compilato in JDK può essere considerato un Plain Old Java Object.
Nessun app server, nessuna classe base, nessuna interfaccia richiesta da usare.
Creiamo una classe POJO chiamata CrunchifyPOJO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
package crunchify . com . tutorials ; /** * @author Crunchify.com Simple POJO Example */ public class CrunchifyPOJO { public String name ; protected String webAddress ; public String email ; protected int zip ; public CrunchifyPOJO ( ) { name = "Crunchify.com" ; webAddress = "https://crunchify.com" ; } // ========================================================== // Create a Setters and Getters for all variables // ========================================================== public String getName ( ) { return name ; } public void setName ( String name ) { this . name = name ; } protected String getWebAddress ( ) { return webAddress ; } protected void setWebAddress ( String webAddress ) { this . webAddress = webAddress ; } public String getEmail ( ) { return email ; } public void setEmail ( String email ) { this . email = email ; } protected int getZip ( ) { return zip ; } protected void setZip ( int zip ) { this . zip = zip ; } public void thisIsCrunchifyReflection ( ) { System . out . println ( "- Hey This is Crunchify's Refection API tutorials. More than 400 Tutorials on Crunchify.com" ) ; } // ========================================================== // Create a String description of a Crunchify credentials // ========================================================== public String toString ( ) { String result = "Name: " + getName ( ) + "\n" ; result += "WebAddress: " + getWebAddress ( ) + "\n" ; result += "email: " + getEmail ( ) + "\n" ; result += "zip: " + getZip ( ) + "\n" ; return result ; } public static void main ( String [ ] args ) { // Create and print a CrunchifyPOJO object ... CrunchifyPOJO crunchify = new CrunchifyPOJO ( ) ; crunchify . setName ( "Crunchify.com" ) ; crunchify . setWebAddress ( "https://crunchify.com" ) ; crunchify . setZip ( 95124 ) ; System . out . println ( crunchify ) ; } } |
Risultato:
1 2 3 4 |
Name : Crunchify . com WebAddress : https : //crunchify.com email : test @ crunchify . com zip : 95124 |

Ora abbiamo Java Reflection's Example
basato su questo POJO.
Dai un'occhiata alla classe di esempio di seguito CrunchifyReflectionTutorial.java
che copre un totale di 9 diversi esempi di API Java Reflection:
Stai eseguendo un programma Java?
Cosa succede se si desidera ispezionare classi, interfacce, campi e metodi in fase di esecuzione, senza conoscere i nomi delle classi, metodi ecc. in fase di compilazione. Bene, con l'aiuto di Reflection è molto facilmente possibile.
Reflection è comunemente utilizzato dai programmi che richiedono la capacità di esaminare o modificare il comportamento di runtime delle applicazioni in esecuzione nella Java virtual machine.
Per quanto riguarda Java Reflection Se hai una delle seguenti domande, sei nel posto giusto:
- Tutorial Java Reflection per classi, metodi, campi
- Caricamento dinamico delle classi tramite l'API Java Reflection
- Dai uno sguardo approfondito all'API Java Reflection
- java api reflection – Come creare un oggetto usando l'oggetto Costruttore
- riflessione – Come si richiama un metodo Java
- Come utilizzare Reflection per chiamare il metodo Java in fase di esecuzione
- java reflection metodo invoke senza argomenti
- Come ottenere il nome della classe, CanonicalName e SimpleName
- Scopriamo se l'oggetto classe rappresenta una classe Array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
package crunchify . com . tutorials ; import java . lang . reflect . Constructor ; import java . lang . reflect . Field ; import java . lang . reflect . Method ; /** * @author Crunchify.com * */ public class CrunchifyReflectionTutorial { public static void main ( String [ ] args ) { CrunchifyPOJO crunchify = new CrunchifyPOJO ( ) ; System . out . println ( "Crunchify Object: ====================\n" + crunchify ) ; // How to find out the Object belongs to which class? Class <? > clazz = crunchify . getClass ( ) ; // Example 1: ==================== How to get the Class's Name, // CanonicalName and SimpleName? String clazzName = clazz . getName ( ) ; String clazzCanonicalName = clazz . getCanonicalName ( ) ; String clazzSimpleName = clazz . getSimpleName ( ) ; System . out . println ( "How to get the Class's Name, CanonicalName and SimpleName? ==================== Example 1" ) ; System . out . println ( "1. clazzName: " + clazzName + ", \n2. clazzCanonicalName: " + clazzCanonicalName + ", \n3. clazzSimpleName: " + clazzSimpleName + "\n" ) ; // Example 2: ==================== Let's find out if class object // represents an Array class int [ ] [ ] crunchifyArr = { { 1 , 1 } , { 2 , 1 } } ; Class <? extends int [ ] [ ] > arrClazz = crunchifyArr . getClass ( ) ; System . out . println ( "Let's find out if class object represents an Array class ==================== Example 2" ) ; if ( arrClazz . isArray ( ) ) { System . out . println ( "- " + arrClazz . getSimpleName ( ) + " is an array class.\n" ) ; } else { System . out . println ( "- " + clazz . getSimpleName ( ) + " is not an array class.\n" ) ; } // Example 3: ==================== Let's find out Object's Type Double crunchifyDouble = 11.1 ; System . out . println ( "Let's find out Object's Type ==================== Example 3" ) ; System . out . println ( "- 11.1 is of Type: " + crunchifyDouble . getClass ( ) . getName ( ) + "\n" ) ; // Example 4: ==================== How to get SuperClass System . out . println ( "How to get SuperClass ==================== Example 4" ) ; System . out . println ( "1. Superclass of crunchify: " + crunchify . getClass ( ) . getSuperclass ( ) + "\n2. Superclass of crunchifyDouble: " + crunchifyDouble . getClass ( ) . getSuperclass ( ) + "\n" ) ; // Example 5: ==================== How to check if class is Primitive // Type of not? System . out . println ( "How to check if class is Primitive Type of not? ==================== Example 5" ) ; System . out . println ( "1. Is 'int' a Prmitive Type: " + int . class . isPrimitive ( ) ) ; System . out . println ( "2. Is 'String' a Prmitive Type: " + String . class . isPrimitive ( ) ) ; System . out . println ( "3. Is 'double' a Prmitive Type: " + double . class . isPrimitive ( ) ) ; // Example 6: ==================== How to create an object using // Constructor object? // A constructor reflection to create a string object by calling // String(String) and String(StringBuilder) constructors. Class < String > clazzString = String . class ; System . out . println ( "\nHow to create object using Constructor object? ==================== Example 6" ) ; try { Constructor <? > constructor = clazzString . getConstructor ( new Class [ ] { String . class } ) ; String object = ( String ) constructor . newInstance ( new Object [ ] { "Hello World!" } ) ; System . out . println ( "1. String.class = " + object ) ; constructor = clazzString . getConstructor ( new Class [ ] { StringBuilder . class } ) ; object = ( String ) constructor . newInstance ( new Object [ ] { new StringBuilder ( "Hello Universe!" ) } ) ; System . out . println ( "2. StringBuilder.class = " + object ) ; } catch ( Exception e ) { e . printStackTrace ( ) ; } // Example 7: ==================== How to get constructors of a class // object? System . out . println ( "\nHow to get constructors of a class object ==================== Example 7" ) ; try { Constructor <? extends CrunchifyPOJO > constructor = crunchify . getClass ( ) . getConstructor ( ) ; System . out . println ( "- Constructor = " + constructor . getName ( ) ) ; } catch ( NoSuchMethodException e ) { e . printStackTrace ( ) ; } // Example 8: ==================== How to get field of a class object try { System . out . println ( "\nHow to get field of a class object ==================== Example 8" ) ; Field [ ] methods = clazz . getFields ( ) ; for ( Field temp : methods ) { System . out . println ( "- " + temp . getName ( ) ) ; } } catch ( Exception e ) { e . printStackTrace ( ) ; } // Example 9: ==================== How to invoke a method using Method // class? try { System . out . println ( "\nHow to invoke a method using Method class ==================== Example 9" ) ; Class <? > c = Class . forName ( "crunchify.com.tutorials.CrunchifyPOJO" ) ; Object obj = c . newInstance ( ) ; Method method = c . getDeclaredMethod ( "thisIsCrunchifyReflection" ) ; method . invoke ( obj ) ; } catch ( Exception e ) { System . out . println ( e ) ; } // Example 10: ==================== get all Declared Class Fields Field [ ] crunchifyFields = CrunchifyPOJO . class . getDeclaredFields ( ) ; System . out . println ( "\nget all Declared Class Fields ==================== Example 10" ) ; for ( Field field : crunchifyFields ) { Class < ? > type = field . getType ( ) ; System . out . println ( "field name : " + field . getName ( ) + " , type : " + type ) ; } } } |
Risultato:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Crunchify Object : ==================== Name : Crunchify . com WebAddress : https : //crunchify.com email : test @ crunchify . com zip : 0 How to get the Class 's Name, CanonicalName and SimpleName? ==================== Example 1 1. clazzName: crunchify.com.tutorials.CrunchifyPOJO, 2. clazzCanonicalName: crunchify.com.tutorials.CrunchifyPOJO, 3. clazzSimpleName: CrunchifyPOJO Let' s find out if class object represents an Array class ==================== Example 2 - int [ ] [ ] is an array class . Let 's find out Object' s Type ==================== Example 3 - 11.1 is of Type : java . lang . Double How to get SuperClass ==================== Example 4 1. Superclass of crunchify : class java . lang . Object 2. Superclass of crunchifyDouble : class java . lang . Number How to check if class is Primitive Type of not ? ==================== Example 5 1. Is 'int' a Prmitive Type : true 2. Is 'String' a Prmitive Type : false 3. Is 'double' a Prmitive Type : true How to create object using Constructor object ? ==================== Example 6 1. String . class = Hello World ! 2. StringBuilder . class = Hello Universe ! How to get constructors of a class object ==================== Example 7 - Constructor = crunchify . com . tutorials . CrunchifyPOJO How to get field of a class object ==================== Example 8 - name - email How to invoke a method using Method class ==================== Example 9 - Hey This is Crunchify ' s Refection API tutorials . More than 400 Tutorials on Crunchify . com get all Declared Class Fields ==================== Example 10 field name : name , type : class java . lang . String field name : webAddress , type : class java . lang . String field name : email , type : class java . lang . String field name : zip , type : int |
L'esempio completo è autospiegabile poiché ho fatto del mio meglio per mettere tutto il sistema in uscita nel programma stesso.

Provalo e fammi sapere se hai qualche domanda. Buona codifica.