Интересно, можно ли ограничить метод, который будет вызываться только одним классом в java.Метод лимитного вызова для одного класса
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);
}
}
}
Как вы можете видеть, у меня есть два класса с методом handleEvent, который должен быть вызван только из одного конкретного класса MultiInstanceAuditingEventHandler. Остальная часть кода должна иметь возможность вызывать только один конкретный класс MultiInstanceAuditingEventHandler.
Целью этого является наличие прокси-сервера, который знает, какие экземпляры должны быть вызваны, и каждый пользователь этого кода должен вызывать этот прокси-сервер.
Есть ли способ достичь этого в Java? Может быть, какой-то узор или какая-то наследующая магия?
Спасибо, Sven
Update
Видя, что не достаточно хорошо программирования решения мудрого, может быть, есть некоторые тестовые инструменты, которые делают анализ кода и может убедиться, что ни один из классов методы называются?
вы не можете поместить их в одном пакете и дать только пакетный доступ к методам handleEvent? – Adi
Что произойдет, если вы не сможете этого предотвратить? Вы можете проверить это во время выполнения, однако в целом это не стоит лишней сложности. –
Защита пакетов была единственным решением, которое пришло в наш ум. Недостатком является то, что все еще можно вызвать методы из этого пакета. Однако можно создать пение le пакет для него. – sveri