【问题标题】:Java, creating interface dynamically?Java,动态创建接口?
【发布时间】:2010-10-14 08:49:06
【问题描述】:

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

问题:

我有一个 OSGi 服务,它发布了一个 Map<String,String>,其中的键定义了该服务的操作。我想直接将这个服务发布为Hessianservice,但是为此,我需要删除一个接口。现在我想在运行时创建这个接口。

【问题讨论】:

  • 有用于字节码操作的库——ASM、javassist 等。

标签: java spring osgi cglib


【解决方案1】:

可以动态创建接口,例如通过使用ASM 等字节码操作库生成接口。但是不可能使用那个接口,因为没有代码可以针对它编译(除非你也动态生成使用它的代码)。

你想做什么?

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      快速谷歌搜索到这个example usage

      【讨论】:

        【解决方案4】:

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

        在这种情况下,只需发布​​一些通用接口的实现,如下所示: 接口通用接口 { 对象调用方法(字符串名称,对象...参数); } 这是您唯一需要的接口,您可以在编译时创建它!只有您可能需要在运行时创建它的实现,例如使用 java.lang.reflect.Proxy

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-10
          • 2016-11-15
          • 2014-04-09
          • 2021-06-08
          • 2016-05-21
          • 2011-04-05
          • 2016-10-24
          相关资源
          最近更新 更多