如何使用反射在Java中调用静态重载方法

时间:2017-06-01 22:45:24

标签: java debugging reflection classloader urlclassloader

我想使用Java Reflection通过jar文件中的URLClassLoader从我的类路径中的类调用方法。

我想从Jar文件中访问的类:

package org.example;

public final class Sample {

    private Sample() {} //disallow outside instantiation

    public static void initialize(String a) {
        Sample.initialize(a, "some string", "some other string")
    }
    public static void initialize(String a, String b, String c) {
        //some logic...
    }

    // ...
}

以下是我尝试从顶级Main类访问上述类的方法。一个名为Test的课程:

public static void main(String[] args) throws Exception {
    final URLClassLoader v1Loader = URLClassLoader.newInstance( new URL[] { new File("./jar/sample.jar").toURI().toURL()} );
    final Class<?> engineClassV1 = v1Loader.loadClass("org.example.Sample");
    Method initMethod1 = engineClassV1.getMethod("initialize", String.class);.........(25)
}

我在第25行得到例外:

Exception in thread "main" java.lang.NoClassDefFoundError: org/example/services/common/exception/ServiceException
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at org.sample.Test.main(Test.java:25)

我做错了什么?如何使用单个String参数访问重载的静态初始化方法?

0 个答案:

没有答案