0

我是第一次使用 Reflections.jar,所以我想知道以下内容

  • 这个 jar 是否有任何版本兼容性(如上面的 jdk6(或)到 jdk8)
  • 加载类时是否有任何加载顺序(如字母顺序(或)放置在类路径中的 jar 顺序)
4

2 回答 2

0

1)根据https://github.com/ronmamo/reflections/blob/master/pom.xml,它是用java 1.7编译的,所以兼容java版本>=1.7
2)http://javarevisited.blogspot .ru/2012/07/when-class-loading-initialization-java-example.html

于 2016-12-06T07:25:50.680 回答
0

如果您正在谈论这个https://github.com/ronmamo/reflections项目,那么它会按照类在类路径中出现的顺序查找类,就像 Java 启动器一样。此处描述了如何找到和加载类的方式https://docs.oracle.com/javase/8/docs/technotes/tools/findingclasses.html

加载类路径顺序中与完整类名匹配的第一个类文件。在下面找到一个小片段进行演示。

假设以下目录和文件

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");
    }
}

首先编译类,为了演示我们在不同的位置创建类文件

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

Main在类路径中执行bin1/beforebin2/将找到并加载DummyClass1inbin1/

java -cp bin/:bin1/:bin2/:lib/* Main

输出

class: sub.optimal.DummyClass1
touched DummyClass 1

Main在类路径中执行bin2/beforebin1/将找到并加载DummyClass1inbin2/

java -cp bin/:bin2/:bin1/:lib/* Main

输出

class: sub.optimal.DummyClass1
touched DummyClass 2
于 2016-12-07T07:57:44.193 回答