2010-12-04 57 views
0

我已經儀表使用ASM我的類和處理像這樣從字節數組中使用一個沒有反射的類?

public class MyClassLoader extends ClassLoader { 
... 
    byte[] classBytes = ... //the class is of type com.mypackage.Test 
    Class clazz = defineClass("com.mypackage.Test", classBytes, 0, classBytes.length); 
    resolveClass(clazz); 
    com.mypackage.Test test =(com.mypackage.Test) clazz.newInstance(); 

但是我得到的最後一行ClassCastException異常:

java.lang.ClassCastException: com.mypackage.Test cannot be cast to com.mypackage.Test 

的解決方法是使用反射:

​​

我使用了錯誤的類加載器嗎?

回答

5

Class.newInstance是一個反射電話。

通常情況下,你會在這些情況下做的是讓類加載器是加載現有代碼的類加載器的子代。實現類從你的代碼的類加載器實現一個接口。使用Class.asSubclass,這樣Class是您的界面的已知子類型。通過Class.getConstructor.newInstance構建實現類的實例。

使用這種技術,您不依賴於使用反射來挑選出一個方法,雖然它確實需要一個無參數構造函數。

+0

+1,優秀的技術。 – 2010-12-04 19:04:04

相關問題