Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Reflectie meesteren: klassen, methoden en velden inspecteren tijdens runtime

Java Reflectie meesteren

Leer hoe Java's reflectie API je in staat stelt klassen, methoden, velden en constructors tijdens runtime te inspecteren en wijzigen, wat flexibiliteit vergroot en krachtige dynamische gedragingen mogelijk maakt.

In Java stelt reflectie je in staat klassen, interfaces, constructors, methoden en velden te onderzoeken en manipuleren terwijl het programma draait.

Java biedt de Class klasse, die metadata over een klasse of interface encapsoleert. Een instantie van Class is de poort tot de reflectiemogelijkheden.


Een Class object verkrijgen

Om reflectie uit te voeren heb je eerst een Class object nodig. Er zijn drie veelvoorkomende manieren om het te verkrijgen:

  1. Class.forName() gebruiken
    Class<Hond> clazz = Class.forName("com.example.Hond");

    De methode accepteert de fully qualified class naam en laadt de klasse als die nog niet geladen is.

  2. getClass() gebruiken op een instantie
    Hond hond = new Hond(); Class<Hond> clazz = hond.getClass();

    Haalt de runtime klasse van het object op.

  3. De .class literal gebruiken
    Class<Hond> clazz = Hond.class;

    Biedt een compile-time referentie naar het Class object.

Eenmaal je een Class instantie hebt, kun je zijn methoden, velden, constructors en annotaties opvragen.


Praktisch voorbeeld: De Hond klasse inspecteren

import java.lang.Class; import java.lang.reflect.*; class Dier {} public class Hond extends Dier { public void toon() { System.out.println("Ik ben een hond."); } } public class Main { public static void main(String[] args) { try { Hond hond = new Hond(); Class<Hond> clazz = hond.getClass(); System.out.println("Naam: " + clazz.getName()); System.out.println("Modifier: " + Modifier.toString(clazz.getModifiers())); System.out.println("Superklasse: " + clazz.getSuperclass().getName()); } catch (Exception e) { e.printStackTrace(); } } }

Uitvoer

Naam: com.example.Hond Modifier: public Superklasse: com.example.Dier

In deze snippet creëerden we een Hond instantie, verkreg zijn Class object, en vroegen de klassenaam, toegangsmodificatie, en superklasse op.

Voor dieper inzicht in Class, raadpleeg de officiële Java Class documentatie.


Velden, methoden en constructors verkennen

java.lang.reflect pakket biedt toegewijde klassen om specifieke leden te introspecteren:

  • Method – details over methoden.
  • Field – details over velden.
  • Constructor – details over constructors.

Methoden reflecteren

De Method klasse blootlegt metadata zoals naam, return type, en modifiers. Hieronder een beknopt voorbeeld:

import java.lang.reflect.*; class Hond { public void toon() { System.out.println("Ik ben een hond."); } private void maakGeluid() { System.out.println("Blaf Blaf"); } } public class Main { public static void main(String[] args) { try { Hond hond = new Hond(); Method[] methoden = hond.getClass().getDeclaredMethods(); for (Method m : methoden) { System.out.println("Methode Naam: " + m.getName()); System.out.println("Modifier: " + Modifier.toString(m.getModifiers())); System.out.println("Return Type: " + m.getReturnType()); System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }

Uitvoer

Methode Naam: toon Modifier: public Return Type: void Methode Naam: maakGeluid Modifier: private Return Type: void

Voor een uitgebreide lijst van Method utilities, bezoek de officiële Method documentatie.


Velden reflecteren

Velden kunnen tijdens runtime benaderd en gewijzigd worden. De Field klasse biedt get, set, en modifier utilities. Voorbeeld:

import java.lang.reflect.*; class Hond { public String type; private String kleur; } public class Main { public static void main(String[] args) { try { Hond hond = new Hond(); Class<Hond> clazz = hond.getClass(); // Publiek veld Field typeField = clazz.getField("type"); typeField.set(hond, "labrador"); System.out.println("Waarde: " + typeField.get(hond)); System.out.println("Modifier: " + Modifier.toString(typeField.getModifiers())); // Privé veld Field kleurField = clazz.getDeclaredField("kleur"); kleurField.setAccessible(true); kleurField.set(hond, "bruin"); System.out.println("Waarde: " + kleurField.get(hond)); System.out.println("Modifier: " + Modifier.toString(kleurField.getModifiers())); } catch (Exception e) { e.printStackTrace(); } } }

Uitvoer

Waarde: labrador Modifier: public Waarde: bruin Modifier: private

Verken de Field klasse documentatie voor geavanceerd gebruik.


Constructors reflecteren

Constructors worden geïntrospecteerd via de Constructor klasse. De volgende code lijst alle constructors van Hond:

import java.lang.reflect.*; class Hond { public Hond() {} private Hond(int leeftijd) {} } public class Main { public static void main(String[] args) { try { Constructor<Hond>[] cons = Hond.class.getDeclaredConstructors(); for (Constructor<Hond> c : cons) { System.out.println("Constructor Naam: " + c.getName()); System.out.println("Modifier: " + Modifier.toString(c.getModifiers())); System.out.println("Parameters: " + c.getParameterCount()); System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }

Uitvoer

Constructor Naam: Hond Modifier: public Parameters: 0 Constructor Naam: Hond Modifier: private Parameters: 1

Voor verdere details, zie de Constructor documentatie.

Java

  1. Java's final-sleutelwoord begrijpen: variabelen, methoden en klassen
  2. Java instanceof operator: een uitgebreide gids
  3. Java-erfenis meesteren: concepten, typen en praktische voorbeelden
  4. Java geneste static classes begrijpen: gebruik, verschillen en voorbeelden
  5. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  6. Java Singleton patroon uitgelegd: hoe veilig te implementeren en gebruiken
  7. Java ArrayList meesteren: operaties, methoden en best practices
  8. Java Stack-klasse: Uitgebreide handleiding voor gebruik en methoden
  9. Java ObjectOutputStream: Serialisatie, methoden en praktische voorbeelden
  10. Java Generics: Herbruikbare, type-veilige code bouwen
  11. Java-bestandsbewerkingen onder de knie krijgen met java.io – Aanmaken, lezen, schrijven en verwijderen