2017-01-03 4 views
0

Ich habe eine Instanz. Grundstruktur ist;Ausführen von Java-Instanz-Methode über Terminal

class Instance{ 

    public void load(){ 
     ... 
    } 

    public boolean execute(){ 
     ... 
     return true; 
    } 

} 

Da in der Regel können wir diese Instanz in static void main(String args[]) ausführen, aber wie können wir diese Instanz ausführen ->load() ->execute() von Terminal oder kompilierte Datei .class innerhalb einer main Methode aufgerufen wird als Reflexion mit definierten Methoden auszuführen.
Weil diese Instanz wie ein Skript auf out-Projekt funktioniert, aber wir definieren keine Hauptfunktion in Klasse.

Wer hilft?

+0

Sie können nicht. Sie können eine Zeichenfolge "execute" oder "load" als Argument übergeben und die Methode von Ihrer Hauptmethode basierend auf der Zeichenfolge aufrufen, die als Argument übergeben wurde. – jordaniac89

Antwort

1

Ich empfehle, einfach eine public static void main(String args[]) hinzufügen, die load() und execute() aufruft, so dass Ihre Klasse von der Befehlszeile in der üblichen Weise ausgeführt werden kann. Es hat wenig Sinn, das Problem zu komplizieren, indem Sie einen reflektionsbasierten Wrapper erstellen, der nur sein eigenes public static void main(String args[]) benötigt.

1

wie können wir diese Instanz ausführen -> load() -> execute() von Terminal

Sie können nicht.

Es wird wahrscheinlich implemented in Java 9 sein, aber momentan gibt es keine offizielle Möglichkeit, Methoden über die Befehlszeile auszuführen.

oder kompilierte Datei .class wird als Reflexion

Verwendung in einem Hauptverfahren genannt

Wie Sie gesagt haben, verwenden Reflexion:

File pathToClass = new File("C:\\Some Folder\\"); 

Class<?> loaded = null; 
try { 
    ClassLoader loader = new URLClassLoader(new URL[] {pathToClass.toURL()}); 
    loaded = loader.loadClass("some.package.foo.Instance"); 
} catch(Exception e) { 
    //do something 
} 

Object i = loaded.newInstance(); 
Method method = loaded.getMethod("execute"); 
Boolean returnValue = (Boolean) method.invoke(i); 

Ich würde empfehlen, dies aber nicht tun - es gibt normalerweise ein besserer Weg und es verkompliziert einfach alles.

Verwandte Themen