我有一个特定的接口,比如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的库可以满足您的需求。如果默认选项不太合适,它也是高度可扩展的。