Abrufen der Klasse in einer Methode mit Reflektion

8
%Vor%

Ich habe Klasse mit Reflektion wie folgt deklariert:

%Vor%

aber mein Programm kann class inside nicht finden.

    
newbie 16.04.2015, 02:50
quelle

4 Antworten

2

Ich glaube nicht, dass es eine Methode gibt, um lokale Klassen zu finden (Klassen innerhalb einer Methode).

Sie könnten versuchen, alle Klassen in der package und verwende dann getEnclosingClass (das Gegenteil von dem, was du suchst), um sie zu filtern.

    
Thilo 16.04.2015 03:12
quelle
2

Dies ist eine Möglichkeit, die innere Klasse in eine Methode zu übernehmen.

%Vor%     
Paulo 16.04.2015 04:02
quelle
2

In Java gibt es keine allgemeinen Methoden zum Auflisten von Klassen nach Entwurf. Dies liegt daran, dass Klassen von überall geladen oder dynamisch erstellt werden können. Das Speichern von Klassendateien in einer JAR oder einem Verzeichnis ist nur einer von möglichen Klassenladeprogrammen.

Obwohl es vernünftiger wäre anzunehmen, dass eingeschlossene Klassen eine bekannte, aufzählbare Menge sind, ist es nicht sinnvoll, eine Methode anzugeben, die nur in diesem speziellen Fall funktioniert.

Wenn Sie den häufigen Fall von URLClassLoader annehmen, können Sie die zugrunde liegenden URLs als Dateisysteme behandeln und deren Inhalt aufzählen. Dies kann angebracht sein, wenn Sie ein Tool erstellen, um etwas mit dem Code von Drittanbietern zu tun, und es wurde sogar für viele Java EE-Standards übernommen (irrtümlich, ich fühle).

Wenn Sie einen Plug-in-Mechanismus erstellen, stellen Sie Metadaten in einem Brunnen bereit -bekannter Standort ist effizienter, zuverlässiger und funktioniert mit jedem gültigen Klassenlader.

    
erickson 16.04.2015 04:19
quelle
1
___ qstntxt ___
%Vor%

Ich habe Klasse mit Reflektion wie folgt deklariert:

%Vor%

aber mein Programm kann getDeclaredClasses() nicht finden.

    
___ answer29665121 ___

Dies ist eine Möglichkeit, die innere Klasse in eine Methode zu übernehmen.

%Vor%     
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123class ___ Eine Vorlage zum Erstellen neuer Objekte, die die allgemeinen Zustände und Verhaltensweisen beschreibt. NICHT MIT CSS-KLASSEN VERWECHSELN. Verwenden Sie stattdessen [css]. ___ answer29665282 ___

In Java gibt es keine allgemeinen Methoden zum Auflisten von Klassen nach Entwurf. Dies liegt daran, dass Klassen von überall geladen oder dynamisch erstellt werden können. Das Speichern von Klassendateien in einer JAR oder einem Verzeichnis ist nur einer von möglichen Klassenladeprogrammen.

Obwohl es vernünftiger wäre anzunehmen, dass eingeschlossene Klassen eine bekannte, aufzählbare Menge sind, ist es nicht sinnvoll, eine Methode anzugeben, die nur in diesem speziellen Fall funktioniert.

Wenn Sie den häufigen Fall von Class annehmen, können Sie die zugrunde liegenden URLs als Dateisysteme behandeln und deren Inhalt aufzählen. Dies kann angebracht sein, wenn Sie ein Tool erstellen, um etwas mit dem Code von Drittanbietern zu tun, und es wurde sogar für viele Java EE-Standards übernommen (irrtümlich, ich fühle).

Wenn Sie einen Plug-in-Mechanismus erstellen, stellen Sie Metadaten in einem Brunnen bereit -bekannter Standort ist effizienter, zuverlässiger und funktioniert mit jedem gültigen Klassenlader.

    
___ tag123oop ___ Objektorientierte Programmierung ist ein Programmierparadigma, das "Objekte" verwendet: Datenstrukturen, die aus Datenfeldern und Methoden zusammen mit ihren Interaktionen bestehen. ___ tag123reflection ___ Reflection ist die Fähigkeit eines Programms, seine Struktur und / oder sein Verhalten zur Laufzeit zu beobachten und / oder zu ändern. ___ qstnhdr ___ Abrufen der Klasse in einer Methode mit Reflektion ___ answer29664673 ___

Die Methode cls kehrt zurück (aus dem Javadoc ) -

  

ein Array von Klassenobjekten, die alle Klassen und Schnittstellen widerspiegeln   als Mitglieder der Klasse deklariert, die durch dieses Klassenobjekt repräsentiert wird.   Dazu gehören public, protected, standard (package) access und private   Klassen und Schnittstellen, die von der Klasse deklariert werden, schließt jedoch geerbt aus   Klassen und Schnittstellen.

Es scheint also, dass es keine innere Klasse zurückgibt, die Sie deklariert haben. Deshalb erhalten Sie nichts in der Anordnung von %code% %code% .

    
___ answer29664699 ___

Ich glaube nicht, dass es eine Methode gibt, um lokale Klassen zu finden (Klassen innerhalb einer Methode).

Sie könnten versuchen, alle Klassen in der package und verwende dann getEnclosingClass (das Gegenteil von dem, was du suchst), um sie zu filtern.

    
___ tag123localclass ___ Lokale Klassen sind Klassen, die in einem Block definiert sind, bei dem es sich um eine Gruppe von null oder mehr Anweisungen zwischen ausgewogenen Klammern handelt. In der Regel finden Sie lokale Klassen, die im Hauptteil einer Methode definiert sind. ___
Razib 16.04.2015 03:05
quelle