gpt4 book ai didi

java - 如何在运行时创建接口(interface)

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:27 25 4
gpt4 key购买 nike

假设我有一个类似的类

public class FooImpl
{
public void bar(){};
}

有没有办法在运行时创建它的接口(interface)?

例如

public interface Foo
{
public void bar();
}

我一直在调查 Javasssist事实是,我对使用该界面感兴趣(正如 Esko Luontola 和 Yishai 所说)

所以我想要一个接口(interface)来指定原始类方法的子集以从中创建代理。

我开始意识到还有更多的事情需要关注

  • 您应该重用该界面还是每次都创建一个新界面?
  • 代理类实际上是 java.lang.reflect.Proxy 类型的新实例,这可能会根据用例产生影响。

最后一点让我想知道一些框架是如何设法处理这个问题的,它们是否深度复制对象?他们是否将代理封装在原始实例中?

因此,要求客户端代码为类创建接口(interface)可能更容易(虽然可能不那么优雅)。

最佳答案

您可以在类加载期间通过一些字节码操作/生成来实现,例如使用 ASM , Javassist或类似的,也可能是AspectJ .

重要的问题是,您为什么需要这样做?没有正常的代码可以通过它的接口(interface)使用这个类,因为接口(interface)在编译时不存在。您可能需要生成使用接口(interface)的代码或使用反射——但在那种情况下,您还不如使用原始类。为了使接口(interface)有用,您可能还应该修改原始类,以便它实现生成的接口(interface)(这可以通过我提到的库来完成)。

关于java - 如何在运行时创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1268207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com