如何动态创建实现某个接口的新类并实例化它?

时间:2014-03-06 20:04:32

标签: java reflection instantiation java-compiler-api

是否可以在Java中运行时编写新类?

有什么办法?恢复体力?编译器API?

我能做到

package tests;

public class TryReflection02 {

    interface A {

    }

    public static void main(String[] args) {

        Object o = new A() {};

        System.out.println( o.toString() );

        o = A.class.newInstance() // exception

    }

}

我可以使用A.class值执行相同操作吗?

1 个答案:

答案 0 :(得分:2)

不,你不能。 A是一个接口,只能实例化类。

可以做的是使用一个库/助手,它使用一些技巧来创建一个实现接口的类并实例化那个。 JDK的Proxy类包含静态方法。还有一些工具可以为测试相关的用例定制,例如mockito

这些工具完全按照你在这个问题的标题中提到的那样:它们不是实例化接口,而是生成一个实现接口的新类,然后实例化该类。