Main Methods an Interfaces mit Java 8

Thomas Darimont

Erfahrenes Mitglied
Hallo,

vor einigen Wochen habe ich bemerkt, dass man in Java 8, dank neuerdings erlaubten static Methoden an interfaces, auch
interfaces definieren kann die eine main-Methode enthalten :)


Nach ein paar Experimenten stellte sich heraus, dass so auch eine Klasse ohne main-Methode durch implementieren eines solchen interfaces durch den java Launcher ausgeführt werden kann.


Ich hab mich damals ziemlich darüber gewundert, dass ich dazu nichts im Netz finden konnte...


Da dies nun die main-Methode des interfaces ausführt braucht man eine Möglichkeit die Klasse zu identifizieren die beim Java Launcher angegeben wurde um die eigentliche Applikation starten zu können. Es stellte sich heraus, dass eine Möglichkeit das herauszufinden darin liegt ein vermutlich JDK Vendor-spezifisches System-Property auszulesen, in diesem Fall "sun.java.command", welches den Namen der an den java Launcher übergebenen Klasse enthält.


Hier dazu mal ein kleines Beispiel:

Unser Interface WithMain:
Java:
package de.tutorials.training;


public interface WithMain {
    public static void main(String[] args){
        System.out.printf("Running: %s%n",System.getProperty("sun.java.command"));
    }
}


Unsere Klasse ClassWithoutMainMethod:
Java:
package de.tutorials.training;


public class ClassWithoutMainMethod implements WithMain {}


Wenn wir nun auf der Konsole folgendes ausführen:
Code:
C:\development\workspaces\intellij\de.tutorials.training>"C:\Program Files\Java\jdk1.8.0\bin\java" -cp target/classes de.tutorials.training.ClassWithoutMainMethod


Sehen wir folgende Ausgabe:
Code:
Running: de.tutorials.training.ClassWithoutMainMethod




Kennt hier noch jemand einen anderen zuverlässigen Weg den Namen der an den java Launcher übergebenen Main-Class herauszufinden?

Gruß Tom
 

Neue Beiträge

Zurück