Я думал о методе get, который сбрасывается. Конструкция у меня тоже работает. Но я не уверен, что мне следует избегать этого. Идея состоит в том, что после первого «истинного» возврата значение автоматически сбрасывается. В этом случае значение get является булевым, что говорит мне, получил ли я ответ. Как только я получу правду, член должен вернуться к false. В противном случае мне пришлось бы сделать это вручную. Ниже приведен мой рабочий метод get для этой идеи. Если значение s true, я запускаю новый небольшой поток, который ждет 200 мс и возвращает элемент обратно в значение false. В то же время старое значение уже возвращается. Мой вопрос в том, может/должен я использовать его так, или есть некоторые основные причины против него? Потому что почему-то у меня появилось ощущение, что этот способ не рекомендуется.Дизайн кода: самовосстановление булевых. Причина в этом?
Благодарим за любые входные данные.
public boolean isAck() {
if (acknowledged){
Thread th = new Thread() {
public synchronized void run() {
try {
Thread.sleep(200);
acknowledged = false;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
th.start();}
return acknowledged;
}
почему не сразу сбросить его? –
Ваши аксессоры, вероятно, также не должны быть мутаторами. Что вы ожидаете от своего опубликованного кода? –
Я не совсем уверен, что вы пытаетесь выполнить, сбросив значение. Однако вы создаете поток для его сброса, и вы столкнетесь с какой-то проблемой параллелизма, если ваше приложение снова попытается получить доступ к isAck. –