3

我正在寻找一种在运行时创建接口的解决方案。我真的不知道这是否可能。

问题:

我有一个 OSGi 服务,它发布了一个Map<String,String>密钥定义该服务的操作的地方。我想直接将此服务作为Hessian服务与 spring 发布,但为此,我需要删除一个接口。现在我想在运行时创建这个接口。

4

4 回答 4

3

可以动态创建接口,例如通过使用ASM等字节码操作库生成接口。但是无法使用该接口,因为无法针对它编译任何代码(除非您还动态生成使用它的代码)。

你想做什么?

于 2010-10-14T09:46:26.047 回答
2

你不能真正做到这一点(除非你涉及字节码操作/创建,我认为这不是最好的路径)。

如果您没有任何东西可以访问该接口,那么动态创建的接口有什么好处?

或者换句话说:没有什么可以针对动态创建的接口进行编译(因为它显然在编译时不存在)。那么谁会使用它呢?

于 2010-10-14T09:12:17.160 回答
0

接口和类的存在只是为了帮助编译器找到可能的错误。如果你想在运行时做这个接口,你没有编译器,它不会给你找bug,那你为什么需要这个接口呢?

在这种情况下,只需发布​​一些通用接口的实现,如下所示: interface GenericInterface { Object invokeMethod(String name, Object... arguments); 这是您唯一需要的接口,您可以在编译时创建它!只有您可能需要在运行时创建它的实现,例如使用 java.lang.reflect.Proxy

于 2010-12-09T13:15:02.000 回答
0

另一个问题中选择了以下答案。该示例实际上编写了一个新类,因此可能会对您有所帮助。

JDK6 有一个Java 编译器 API。但是,它不一定很容易使用。

一个快速的谷歌提取了这个示例用法

于 2010-10-14T09:34:51.477 回答