2014-11-04 64 views
0

我如何在Java中動態創建一個類,如果我現在只有父類在運行時通過反射?在Java中是否有與Python的`type(name,bases,dict)`類似的東西?

// I only know what ParentClass is at runtime 
// but I know that ParentClass implements SomeInterface. 
public class MyClass extends ParentClass implements SomeInterface { 
    // I know the method I want to override, 
    // and that ParentClass has a no-argument constructor. 
    @Override 
    public int method(int arg) { 
     return 42 * arg; 
    } 
} 

例如,在Python中你可以使用

MyClass = type("MyClass", (ParentClass,), { 
    'method': lambda self, arg: 42 * arg 
}) 
# or even easier 
class MyClass(ParentClass): 
    def name(self, arg): 
     return 42 * arg 

那麼,有沒有一個相當於Python的type(name, bases, dict)在Java中?

+0

爲什麼你需要在運行時做到這一點?看看'Proxy'。 – 2014-11-04 05:13:01

回答

1

在java中沒有直接/簡單的方法來做到這一點。我們需要創建類文件並將其加載到類加載器中。你可以參考下面的回答Writing and implementing new Java class files during run-time。幾個第三方庫如ASM,CGLIB,JAVASSIST有助於實時創建代碼。

+0

謝謝,JavaAssist爲我工作。 – kay 2014-11-04 06:52:11

相關問題