自动生成包装以防止“恶意贬低”?

时间:2009-04-20 03:06:02

标签: java delegates code-generation

如果在Java中实现接口,则没有什么可以阻止调用者查看您提供的具体实现,转换为该类并调用不在接口中的方法。我相信这被称为“恶意贬低”。

防止这种情况的一种方法是创建一个只包含接口方法的包装器,并且不公开它所委托的实现实例。如果没有对私有变量的反思,那么你应该是安全的。

有没有办法自动创建这种包装器(在运行时,不使用IDE中的代码创建向导,因为仍然会创建需要维护的源文件)?

2 个答案:

答案 0 :(得分:8)

另一种防止这种情况的方法是使用工厂类,并将实现作为工厂的私有内部类。只有工厂才能看到它,它只返回接口类型,因此没有具体的实现可以反对。

答案 1 :(得分:7)

我喜欢James Black的回答,但为了多样性,我会发布另一种方法。

您可以使用java.lang.reflect.Proxy执行此操作。有关使用Proxy的一些代码(针对其他问题),请参阅this post;你可以使用类似的代码,如果你删除同步的东西。