[英]Passing Parameters Between ClassLoaders Via Reflection API
我正在使用自定義類加載器來創建和返回類的實例,這似乎工作正常但是當我嘗試調用方法(通過Reflection API)並傳入自定義對象時,如下所述,我得到一個NoSuchMethodException
:
假設自定義類加載器創建並返回如下所示的實例:
Object obj = customClassLoader.load(String className,Class[] paramTypes,Object[] param)
然后我調用一個方法(通過反射)並傳入一個自定義對象:
注意:這就是造成錯誤的因素
Method m = obj.getClass.getDeclaredMethod("mName",new Class[]{aCustomObject.class})
m.invoke(obj,new Object[]{new CustomObject() })
我很難理解可能導致異常的原因,因為確實存在一個接受指定自定義對象的方法,我通過使用反射來列出所有方法來證實這一點。
你的自定義加載器的load()方法如何實例化它要返回的對象? 在嘗試查找正確的構造函數時,可能會出現NoSuchMethodException
?
這個例子似乎沒問題:
package com.pholser;
import java.lang.reflect.Method;
public class ClassLoading {
public static class CustomLoader extends ClassLoader {
public Object load(String className, Class<?>[] paramTypes, Object[] params) throws Exception {
Class<?> loaded = loadClass(className);
return loaded.getConstructor(paramTypes).newInstance(params);
}
}
public static class ACustomObject {
}
public void foo(ACustomObject a) {
System.out.println("foo");
}
public static Object newCustomObject() throws Exception {
return new CustomLoader().load("com.pholser.ClassLoading$ACustomObject", new Class<?>[0], new Object[0]);
}
public static void main(String[] args) throws Exception {
ClassLoading obj = new ClassLoading();
Method m = obj.getClass().getDeclaredMethod("foo", ACustomObject.class);
m.invoke(obj, newCustomObject());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.