Допустим, у «нас» есть некоторые логические флаги, которые определяют, как приложение ведет себя в любой момент времени ... что угодно, от того, как обрабатываются касания, до того, что происходит в onPause ().
boolean touchMode_BlockAllExceptCreateNew = false;
boolean touchMode_UserIsEditting = false;
boolean touchMode_Animation4IsTakingPlace = false;
Там может быть потенциально бесконечным числом этих маленьких парней.:)
Эти "состояния" являются взаимоисключающими - только одно может или должно происходить на законных основаниях за один раз.
Так что ... не существует ли какого-либо умного способа обеспечить соблюдение этого взаимногоисключительность путем объединения их в одну переменную?
Является ли использование Enum практически единственным способом сделать это?Вот так:
private enum TouchMode {
flibbidyInProgress,
deletePending,
userIsEditting,
jumpingJacks,
recyclerViewIsOpen,
normal // none
}
TouchMode currentTouchMode = TouchMode.normal;
private void changeTouchMode(TouchMode desiredTouchMode) {
boolean undesirableCondition1 = (desiredTouchMode == currentTouchMode);
boolean undesirableCondition2 = (desiredTouchMode != TouchMode.normal
&& currentTouchMode != TouchMode.normal);
if (undesirableCondition1 | undesirableCondition2) {
Log.e("XXX", ">> ILLEGAL TOUCHMODE REQUEST! <<");
Log.e("XXX", "requested: " + desiredTouchMode
+ ", current: " + currentTouchMode);
} else {
currentTouchMode = desiredTouchMode;
}
}
Мне показалось, что я нашел какой-то умный способ превратить currentTouchMode в int и присвоить ему шестнадцатеричные константы.