У моего класса есть запланированный метод, который запускается каждые полсекунды и проверяет данные, чтобы увидеть, не истекло ли время ожидания какого-либо из устройств. Если время ожидания истекло не менее 5 секунд, я отправляю событие в свою базу данных (это делается методом checkSpecs
, который я здесь не воспроизводил. Фактический класс довольно велик, поэтому я попытался уменьшить размер, пока сохраняя соответствующие части).
Теперь я добавляю к классу новый метод checkReconnections
, который я хочу использовать, чтобы генерировать другое событие в базе данных всякий раз, когда восстанавливается соединение, для которого ранее истекло время ожидания.
Поскольку мой класс очень велик и я с помощью этого метода слежу за несколькими устройствами, я попытался создать вспомогательный метод monitorConnectionStatus
, который принимает два логических значения в качестве аргументов. Мой вопрос касается этого метода.
У меня сложилось впечатление, что при передаче переменных экземпляра в monitorConnectionStatus
при вызове метода этот метод получает к ним доступ и может переназначить эти переменные. Это мое намерение, чтобы метод работал должным образом. Но моя IDE сообщает мне, что значение disconnectionStatus
всегда будет ложным, что заставило меня задуматься: я ошибаюсь, полагая, что переменная экземпляра будет переназначена? Возможно ли, что в этом случае моя IDE просто ошибочна? переменная?
Public Class OffSpecAgent {
private final DataModel dataModel;
private int deviceATimeoutCounter = 0;
private boolean isDeviceATimeout = false;
private boolean hasADisconnected = false;
private int deviceBTimeoutCounter = 0;
private boolean isDeviceBTimeout = false;
private boolean hasBDisconnected = false;
@Scheduled(fixedDelay = 500)
public void offSpecMonitor() {
checkTimeouts();
checkReconnections();
checkSpecs();
}
private void checkTimeouts() {
deviceATimeoutCounter = dataModel.getBoolean(DEVICE_A_TIMEOUT) ? deviceATimeoutCounter + 1 : 0;
isDeviceATimeout = deviceATimeoutCounter >= 10;
deviceBTimeoutCounter = dataModel.getBoolean(DEVICE_B_TIMEOUT) ? deviceBTimeoutCounter + 1 : 0;
isDeviceBTimeout = deviceATimeoutCounter >= 10;
}
private void checkReconnections() {
monitorConnectionStatus(isDeviceATimeout, hasADisconnected);
monitorConnectionStatus(isDeviceBTimeout, hasBDisconnected);
}
private void monitorConnectionStatus(boolean timeoutCondition, boolean disconnectionStatus) {
if (timeoutCondition) {
disconnectionStatus = true;
}
if (disconnectionStatus && !timeoutCondition) {
disconnectionStatus = false;
//throw reconnection event
}
}
}