Java 将方法调用限制为一个类
我想知道在java中是否可以将一个方法限制为只由一个类调用Java 将方法调用限制为一个类,java,limit,method-call,Java,Limit,Method Call,我想知道在java中是否可以将一个方法限制为只由一个类调用 public interface IAuditingEventHandler { public void handleEvent(BaseEventType event); } public class EDAEventHandler implements IAuditingEventHandler { //should be callabe only from MultiInstanceAuditingEventHa
public interface IAuditingEventHandler {
public void handleEvent(BaseEventType event);
}
public class EDAEventHandler implements IAuditingEventHandler {
//should be callabe only from MultiInstanceAuditingEventHandler
@Override
public void handleEvent(BaseEventType event)...
}
public class DBEventHandler implements IAuditingEventHandler {
//should be callabe only from MultiInstanceAuditingEventHandler
@Override
public void handleEvent(BaseEventType event)...
}
public class MultiInstanceAuditingEventHandler implements IAuditingEventHandler {
private final List<IAuditingEventHandler> eventHandlers;
public MultiInstanceAuditingEventHandler(List<IAuditingEventHandler> eventHandlers) {
this.eventHandlers = eventHandlers;
}
// can be called from everywhere
@Override
public void handleEvent(BaseEventType event) {
for (IAuditingEventHandler eventHandler : eventHandlers) {
eventHandler.handleEvent(event);
}
}
}
公共接口IAuditingEventHandler{
公共无效handleEvent(BaseEventType事件);
}
公共类EDAEventHandler实现IAuditingEventHandler{
//应仅从MultiInstanceAuditingEventHandler调用
@凌驾
公共无效handleEvent(BaseEventType事件)。。。
}
公共类DBEventHandler实现IAuditingEventHandler{
//应仅从MultiInstanceAuditingEventHandler调用
@凌驾
公共无效handleEvent(BaseEventType事件)。。。
}
公共类MultiInstanceAuditingEventHandler实现IAAuditingEventHandler{
私人最终名单;
公共多实例AuditingEventHandler(列出EventHandler){
this.eventHandlers=eventHandlers;
}
//到处都可以打电话
@凌驾
public void handleEvent(BaseEventType事件){
对于(IAuditingEventHandler eventHandler:eventHandlers){
eventHandler.handleEvent(事件);
}
}
}
如您所见,我有两个类,其方法为handleEvent,只能从一个特定类MultiInstanceAuditingEventHandler调用。代码的其余部分应该只能调用一个特定的类MultiInstanceAuditingEventHandler
这样做的目的是让代理知道应该调用哪些实例,并且该代码的每个用户都必须调用该代理
有没有一种方法可以在Java中实现这一点?也许是某种模式或某种遗传魔法
谢谢,
斯文
更新
鉴于在编程方面没有足够好的解决方案,也许有一些测试工具可以进行代码分析,并确保没有调用任何类方法?如果您的类在同一个包中,您可以从方法中删除
public
修饰符(在接口和实现中)使其包私有化。(见附件)
或者,如果您想将访问权限限制为仅从MultiInstanceAuditingEventHandler
,则可以在运行时读取堆栈跟踪,但必须在每个实现方法中单独执行。(这感觉像是作弊,我不鼓励这种选择。)另一个答案描述了“包私有”选项。(你显然已经考虑过了
另一个选项是在
MultiInstanceAuditingEventHandler
类中声明EDAEventHandler
和DBEventHandler
,并将它们声明为private static
您不能将它们放在同一个包中,只允许对handleEvent方法进行包级访问吗?如果不能预先声明,会发生什么这是不是?你可以在运行时检查,但是一般来说,这样做不值得额外的复杂性。我们想到的唯一解决方案是包保护。缺点是仍然可以从包内调用方法。但是,可以为它创建一个包。我们要做的是保留其他方法我们团队中的ER避免了犯错误,只调用单个实现,而不是该接口的每个可用实现。