在URL类加载器Java中传递一个对象数组



我正在编写一个java程序,它非常模块化,所以它的类通常是从网络共享加载的。我找到了一个加载类的解决方案。然而,它的参数是int或String对象,而不是Object数组,也就是Object[]。我希望它能够加载参数只有一个的类和Object Array(在我看来,将更多对象作为参数传递时会更整洁(。下面是我为与对象数组一起使用而编辑的解决方案,以及引发的异常。如果有人能帮忙,我将不胜感激。

公共类LoadClassObjArrArg扩展了ClassLoader{

public LoadClassObjArrArg(String className, Object[] arg) {
URL url;
try {
url = new URL("file:bin/cl/");
URLClassLoader ucl = new URLClassLoader(new URL[]{url});
Class<?> loadedClass = ucl.loadClass(className);
try {
Constructor constructor = loadedClass.getConstructor(Object[].class);
constructor.newInstance(arg);
} catch (Exception exception) {e.printStackTrace();
Constructor constructor = loadedClass.getConstructor();
constructor.newInstance();
}

} catch (Exception e) {
e.printStackTrace();
}
}

}

此外。以下是内部try/catch块中第一个异常的堆栈跟踪。

java.lang.IllegalArgumentException: wrong number of arguments
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at LoadClassObjArrArg.<init>(LoadClassObjArrArg.java:20)
at Saba.main(Saba.java:268)

第二。。。。

at LoadClassObjArrArg.<init>(LoadClassObjArrArg.java:20)
at Saba.main(Saba.java:268)"
java.lang.NoSuchMethodException: ScreenComponentParameters.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3585)
at java.base/java.lang.Class.getConstructor(Class.java:2271)
at LoadClassObjArrArg.<init>(LoadClassObjArrArg.java:28)
at Saba.main(Saba.java:268)

由于某些原因,当我在调用新实例时将Object数组转换为Object时,它会起作用。

try {
Constructor constructor = loadedClass.getConstructor(Object[].class);
constructor.newInstance((Object)arg);

} catch (Exception exception) {
exception.printStackTrace();
Constructor constructor = loadedClass.getConstructor();
constructor.newInstance();
}

最新更新