用Java生成接口的转发实现



我有一个特定的接口,比如InterfaceX和一个简单的委托装饰器实现,它只委托给被装饰的接口。(遵循Effective Java中的类似模式)。然后,不同的类可以扩展ForwardingInterfaceX,只实现特定的方法,而不是接口中的所有方法。

interface InterfaceX
{
   public void foo();
   public SomeOtherObject bar();
}
public class ForwardingInterfaceX implements InterfaceX
{
    private final InterfaceX decorated;
    public ForwardingInterfaceX(InterfaceX decorated)
    {
        this.decorated = decorated;
    }
    public void foo()
    {
        decorated.foo();
    }
    public SomeOtherObject bar()
    {
        return decorated.bar();
    }
}
/** Only overrides the bar method **/
public class AnotherInterfaceXImplementation extends ForwardingInterfaceX
{
    private final InterfaceX decorated;
    public AnotherInterfaceXImplementation(InterfaceX decorated)
    {
        this.decorated = decorated;
    }
    public SomeOtherObject bar()
    {
        // Some Code
        // More Code
        return decorated.bar();
    }
}

我不控制InterfaceX的变化。到目前为止,我已经手工编写了ForwardingInterfaceX,但随着InterfaceX的每次更改,我需要修改ForwardingInterfaceX,这变得乏味。

我搜索了相当多,但可以找到运行时代理相关的库/工具,这些库/工具似乎不够好,因为我扩展了生成的ForwardingInterfaceX类以用于其他类(如AnotherInterfaceXImplementation)扩展。

是否有任何工具,我可以使用自动生成ForwardingInterfaceX作为构建过程的一部分,以便它自动跟上InterfaceX的任何变化。我感兴趣的是可以集成到像ant这样的构建环境中的工具(而不是Eclipse或其他基于IDE的工具)。

Ant没有这样的内置功能,而且我不知道有任何工具可以在构建时生成任意的静态代理类。如果需要,则可能需要编写一个自定义Ant任务,该任务使用反射来发现目标接口的方法,然后编写源文件(随后进行编译)或生成.class文件。如果你已经试过了,但没有效果,那么你应该问一个更具体的问题。

(请注意,询问使用工具的建议被认为是偏离StackOverflow的主题。该网站旨在帮助人们在选择工具后遇到的问题。

这不是一个基于蚁群的解决方案,但是有一个名为Proxy Toys的库可以满足您的需求。如果默认选项不太合适,它也是高度可扩展的。

相关内容

  • 没有找到相关文章

最新更新