java - 对象不是使用 java 反射声明类的实例

标签 java reflection classloader urlclassloader

我正在尝试使用 java 反射和 classLoader 从 URL 加载类。该应用程序部署在weblogic 12c服务器上

        File f = new File("/a/abc");
        URL url = f.toURI().toURL();
        ClassLoader classLoader =  ClassLoader.getSystemClassLoader();
        Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
        method.setAccessible(true);
        method.invoke(classLoader, url);
        Class jobClass = classLoader.loadClass("com.test.abc");

但是,我收到以下错误:

抛出异常:

java.lang.IllegalArgumentException: object is not an instance of declaring class
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)

请告诉我这里可能存在什么问题,或者这是否不是正确的方法。

最佳答案

您正在调用 ClassLoader 类型的类上的“addURL”方法。 ClassLoader 类不包含成员方法“addURL”。这就是您收到错误的原因。

相反,您应该使用 URLClassLoader 类型的对象调用 Method 的“invoke”方法。

关于java - 对象不是使用 java 反射声明类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59422988/

相关文章:

java - 找不到 LWJGL 显示类

java - 如何更改 websphere 8.5.5 中的类加载器 jar 位置

c# - 在 C# 中获取命名空间中的类列表

C#,获取一个对象的所有集合属性

c# - 只获取直接接口(interface)而不是全部?

java - 从 cloudfroundry v2 (pivotal) 下载 webapp 文件夹

java - 获取 Android Spinner 焦点的最佳方式

java - 类加载器之间的反射参数类型不匹配

java - 通过反射创建时将对象转换为接口(interface)

java - 长时间运行的 Tomcat 进程的类加载器中的问题