gpt4 book ai didi

java - 在 Java 中重构互斥 boolean 值

转载 作者:行者123 更新时间:2023-12-02 10:45:20 24 4
gpt4 key购买 nike

让我们说“我们”有一些 boolean 标志来指示应用程序在任何给定时间的行为......从如何处理触摸到 onPause() 中发生的情况。

boolean touchMode_BlockAllExceptCreateNew = false;
boolean touchMode_UserIsEditting = false;
boolean touchMode_Animation4IsTakingPlace = false;

这些小家伙的数量可能是无限的。 :)

这些“状态”是相互排斥的——一次只有一种状态可以或应该合法发生。

那么...是否有一些巧妙的方法可以通过将它们组合成一个变量来强制执行这种相互排他性?

使用枚举是做到这一点的唯一方法吗?像这样:

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 并为其分配十六进制常量。

最佳答案

您应该阅读策略 OOP 模式,它用于类似的情况。以下是一些有用的链接:

wiki

refactoring Guru

如果很快 - 您应该为每个 TouchMode 创建具有公共(public)接口(interface)和类特定实现的类层次结构(例如 AnimationTouchEditionTouch 等) .)。然后您应该通过通用界面使用它们。

关于java - 在 Java 中重构互斥 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52625346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com