Thi*_*ilo 2 java delegates code-generation
如果在Java中实现接口,则没有什么可以阻止调用者查看您提供的具体实现,转换为该类并调用不在接口中的方法.我相信这被称为"恶意贬低".
防止这种情况的一种方法是创建一个只包含接口方法的包装器,并且不公开它所委托的实现实例.如果没有对私有变量的反思,你应该是安全的.
有没有办法自动创建这种包装器(在运行时,不使用IDE中的代码创建向导,因为仍然会创建需要维护的源文件)?
另一种防止这种情况的方法是使用工厂类,并将实现作为工厂的私有内部类.只有工厂可以看到它,它只返回接口类型,因此没有具体的实现可以反对.