0
我正在使用ASM的ClassWriter來複制類。我使用反射來加載這個重複的字節代碼的類,但是當我嘗試用重複類的實例調用重複類的方法時,我得到'對象不是聲明類的實例'異常。對象不是聲明類的實例
Object originalObj = ...
Class<?> originalClass = obj.getClass();
String methodName = ...
ClassReader cr = new ClassReader(originalClass.getName());
ClassWriter cw = new ClassWriter(0);
cr.accept(cw, 0);
DynamicClassLoader loader = new DynamicClassLoader();
Class<?> c = loader.define(originalClass.getName(), cw.toByteArray());
Method m = c.getMethod(methodName); // Assume 'methodName' has no args
m.setAccessible(true);
m.invoke(originalClass.cast(originalObj));
originalObj被聲明爲Object,因此將無法訪問您的方法。你必須originalClass.cast(...)它的類型來調用方法... –
@GermannArlington感謝您的建議,但不幸的是,例外仍然發生 – user973758
如果我嘗試使用c投擲originalObject我得到一個ClassCastException - 但c和originalClass具有相同的字節碼,爲什麼這是一個問題? – user973758