2016-07-11 28 views
0

Ich habe eine Klassendatei (sagen Foo.class) mit JFileChooser und gespeichert es in einem File-Objekt (z. B. File a). jetzt muss ich Metadaten wie Methoden und Variablen dieser Foo.class mit Reflection APIs lesen. Meine Frage ist, dass ich es in a gespeichert habe, die nur eine File reference variable ist. Wie kann ich eine API in einer Datei verwenden? oder ein anderer Vorschlag dafür sind ebenfalls willkommen.Wie erstellt man eine Instanz der Klasse File?

Antwort

1

wie ich verstehen, zunächst einmal müssen Sie Klassendatei Class-Objekt konvertieren können Sie das über URLClassLoader tun Nehmen wir an, Sie Datei-Klassendatei und String classname haben (auch können Sie es herausfinden classname genau gleiche mit dem Dateinamen)

try { 
    URLClassLoader classLoader = new URLClassLoader(new URL[]{parent_directory}); 
    Class<?> clazz = classLoader.loadClass(className); 
} catch (Exception e) { 
    // something went wrong.. 
    e.printStackTrace(); 
} 

dann haben Sie jetzt Klassenobjekt und Sie können Reflektion verwenden, um Klassenobjekt

try { 
    Object instance = clazz.newInstance(); // if there no default constructor you need to get constructors list and create a object 
    Method method = clazz.getDeclaredMethod(methodName, String.class); 
    method.setAccessible(true); 
    method.invoke(instance, argument); 
} catch (Exception e) { 
    // something went wrong.. 
    e.printStackTrace(); 
} 

Hinweis zu erstellen, dass Methodenname unbekannt ist, müssen Sie einen Weg, um die Identifizierung zu erstellen.

+1

Die 'URL', die Sie an den' URLClassLoader' übergeben, muss das Basisverzeichnis und nicht die Klassendatei darstellen. Sie müssen also das übergeordnete Verzeichnis der Klasse oder eines ihrer Vorfahren verwenden, abhängig vom Paket der ausgewählten Klasse. – Holger

+0

yeah das ist wahr nach deinem Kommentar Antwort wurde aktualisiert –

+0

yeah..but 'loadClass' Methode nimmt den binären Namen einer Klasse als Argument und in meinem File Class Objekt habe ich nur den absoluten Pfad dieser Klasse. Gibt es eine Lösung dafür? @mithatkonuk – Shubham