Tutorial Java Reflection: Creați Java POJO folosind API-ul Reflection pentru a obține ClassName, DeclaredFields, ObjectType, SuperType și altele...
Publicat: 2019-06-10
Cel mai bun mod programatic de a obține toate câmpurile de clasă declarate în Java folosind API-urile Reflection
În acest tutorial, voi scrie mai întâi Java POJO simplu și voi efectua toate exemplele de reflecție Java pe POJO. Trebuie să fi auzit de Termenul POJO. Ce este Plain Old Java Object ?
De asemenea, dacă aveți întrebări de mai jos, vă aflați în locația potrivită:
- java – Cum se creează un POJO?
- java – Creați clase POJO simple
- Obiecte Java vechi simple (POJO) în Java
- Introducere în POJO (Plain Old Java Object)
- Proiectarea clasei POJO
- Creați prima persoană din clasa Java POJO
Un POJO este doar un Java Bean simplu, vechi, cu restricțiile eliminate. Java Beans trebuie să îndeplinească următoarele cerințe:
- Urmați convenția Bean a
getFoo(sauisFoopentru booleani) și metodelesetFoopentru un atribut mutabil numit foo; omite setFoo dacă foo este imuabil. - Constructor implicit
no-arg - Trebuie implementat
java.io.Serializable
POJO nu impune niciuna dintre acestea. Este exact ceea ce spune numele: un obiect care se compila sub JDK poate fi considerat un Plain Old Java Object.
Fără server de aplicații, fără clase de bază, fără interfețe necesare pentru utilizare.
Să creăm clasa POJO numită 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 ) ; } } |
Rezultat:
|
1 2 3 4 |
Name : Crunchify . com WebAddress : https : //crunchify.com email : test @ crunchify . com zip : 95124 |

Acum să avem Java Reflection's Example bazat pe acest POJO.
Aruncă o privire la clasa de exemplu CrunchifyReflectionTutorial.java de mai jos, care acoperă un total de 9 exemple diferite de API Java Reflection:
Rulați un program Java?
Ce se întâmplă dacă doriți să inspectați clase, interfețe, câmpuri și metode în timpul execuției, fără a cunoaște numele claselor, metodelor etc. în timpul compilării. Ei bine, cu ajutorul Reflection este foarte ușor posibil.
Reflection este folosit în mod obișnuit de programele care necesită capacitatea de a examina sau modifica comportamentul de rulare al aplicațiilor care rulează în mașina virtuală Java.
În ceea ce privește Java Reflection Dacă aveți oricare dintre întrebările de mai jos, vă aflați în locația potrivită:
- Tutorial de reflecție Java pentru clase, metode, câmpuri
- Încărcare dinamică a clasei folosind API-ul Java Reflection
- Aruncă o privire în profunzime la API-ul Java Reflection
- java api reflection – Cum se creează un obiect folosind obiectul Constructor
- reflectare – Cum invoc o metodă Java
- Cum să utilizați Reflection pentru a apela metoda Java în timpul execuției
- Metoda de invocare a reflexiei java fără argumente
- Cum să obțineți numele clasei, CanonicalName și SimpleName
- Să aflăm dacă obiectul clasei reprezintă o clasă 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 ) ; } } } |
Rezultat:
|
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 |
Exemplul complet este explicabil, deoarece am încercat tot posibilul să pun cât mai multe ieșiri de sistem în programul în sine.

Încercați-l și spuneți-mă dacă aveți întrebări. Codare fericită.
