Wenn Sie dieses https://github.com/ronmamo/reflections Projekt im Gespräch sind dann die Klassen in der Reihenfolge, wie sie wie der Java-Launcher in Ihrem Classpath erscheinen finden täte. Die Art, wie Klassen gefunden und geladen werden, ist hier beschrieben https://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html.
Die erste Klassendatei in der Klassenpfad-Reihenfolge, die dem vollständigen Klassennamen entspricht, wird geladen. Hier finden Sie ein kleines Schnipsel zur Demonstration.
nehmen folgende Verzeichnisse und Dateien
lib/annotations-2.0.1.jar
lib/guava-15.0.jar
lib/javassist-3.18.2-GA.jar
lib/reflections-0.9.9.jar
src/DummyInterface.java
src/Main.java
src1/DummyClass1.java
src2/DummyClass1.java
src/DummyInterface.java
package sub.optimal;
public interface DummyInterface {}
src/Main.java
import org.reflections.Reflections;
import sub.optimal.DummyInterface;
public class Main {
public static void main(String[] args) throws Exception {
Reflections reflections = new Reflections("sub.optimal");
for (Class c : reflections.getSubTypesOf(DummyInterface.class)) {
System.out.println("class: " + c.getCanonicalName());
c.newInstance();
}
}
}
src1/DummyClass1.java
package sub.optimal;
public class DummyClass1 implements DummyInterface {
static {
System.out.println("touched DummyClass 1");
}
}
src2/DummyClass1.java
package sub.optimal;
public class DummyClass1 implements DummyInterface {
static {
System.out.println("touched DummyClass 2");
}
}
zuerst die Klassen zusammenstellen, für die Demonstration wir die Klassendateien in verschiedenen Orten erstellen
javac -cp lib/* -d bin/ src/DummyInterface.java src/Main.java
javac -cp bin/:lib/* -d bin1/ src1/DummyClass1.java
javac -cp bin/:lib/* -d bin2/ src2/DummyClass1.java
Ausführen von Main
mit bin1/
vor bin2/
in der Klasse Pfad wird den DummyClass1
in bin1/
java -cp bin/:bin1/:bin2/:lib/* Main
Ausgang
class: sub.optimal.DummyClass1
touched DummyClass 1
Ausführung Main
mit bin2/
vor bin1/
im Klassenpfad finden und laden Sie den DummyClass1
in bin2/
java -cp bin/:bin2/:bin1/:lib/* Main
Ausgang finden und laden
class: sub.optimal.DummyClass1
touched DummyClass 2
Klassen werden auf der Basisbasis geladen. Für Informationen, wie eine Klasse gefunden wird, können Sie hier https: // docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html – SubOptimal
Danke für die Antwort ... https://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html In diesem Autor sehr allgemein erklärt, aber mein Zweifel ist ** Gibt es eine bestimmte Art von Klasse laden in Reflexionen **, Wenn ja, was ist das – sera