2016-12-06 2 views
0

Ich verwende Reflections.jar zum ersten Mal zu wissen, so Ich mag die folgendenkann mir jemand helfen, jdk Version Kompatibilität auf org.reflections.Reflections jar

  • Gibt es eine Versionskompatibilität für das wissen jar (wie oben JDK6 (oder) bis jdk8)
  • Während Belastungsklassen gibt es Lade beliebige Reihenfolge erfolgen (wie alphabetische Reihenfolge (oder) Reihenfolge der jar in classpath platziert)
+0

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

+0

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

Antwort

0

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 
+0

Danke, es war klar und ich habe es :) ... – sera

+0

Gibt es eine Möglichkeit, dieses Verhalten zu ändern. Zum Beispiel habe ich Gläser sagen 'A.jar mit Klassen Z.class, Y.class .... und B.jar - Klassen F.class, G.class' ** Z.class abhängig von F.class ** Ich habe diese Gläser im Klassenpfad gesetzt hat Z.jar; Y.jar; , Wenn dies der Fall ist, wie wird die Klasse geladen? und wenn ich zuerst Y.class und dann G.class laden möchte, gibt es irgendeinen Weg, dies zu tun? - Vielen Dank im Voraus :) – sera

+0

@sera Wenn 'A.jar' (und keine andere JAR-Datei im Klassenpfad) keine' F.class' enthalten, dann ist die Reihenfolge von 'A.jar' und' B .jar' spielt keine Rolle. Wenn 'A.jar' und' B.jar' eine 'F.class' enthalten und die' F.class' aus 'B.jar' geladen werden soll, muss' B.jar' vor 'A.jar erscheinen 'im Klassenpfad. – SubOptimal

0
+0

Zunächst einmal vielen Dank für Ihre Antwort. – sera

+0

http://javarevisited.blogspot.ru/2012/07/when-class-loading-initialization-java-example.html In diesem Autor sehr allgemein erklärt, so habe ich Zweifel wie, ** ist es auch für Reelections? , gibt es eine Methode zum Laden von Klassen in Reflections? ** Vielen Dank im Voraus – sera

+0

Es tut mir leid, ich habe Ihre zweite Frage missverstanden. Wie Reflections Klassen lädt - ich weiß nicht, können Sie ihre Dokumente oder Quellcode überprüfen, da es Open Source ist. – Sergi

Verwandte Themen