java – 在方法中重构多个if-else条件
发布时间:2020-12-15 04:51:04 所属栏目:Java 来源:网络整理
导读:我正在重构我现有的代码.它实际上工作正常,但它有点混乱,多个if-else条件检查一个变量的值,并将第二个变量的值更改为从固定枚举结构中获取的更新值. else if (var1 == 'valueX'){ if (var2 == MyEnum.A) var2 = MyEnum.B; else if (var2 == MyEnum.B) var2 =
我正在重构我现有的代码.它实际上工作正常,但它有点混乱,多个if-else条件检查一个变量的值,并将第二个变量的值更改为从固定枚举结构中获取的更新值.
else if (var1 == 'valueX') { if (var2 == MyEnum.A) var2 = MyEnum.B; else if (var2 == MyEnum.B) var2 = MyEnum.C; else if (var2 == MyEnum.C) var2 = MyEnum.D; else if (var2 == MyEnum.D) var2 = MyEnum.A; } else if (....) { ..similar block of conditionals } 关于重构和清理这段代码的最佳方法,我有点困惑.你会建议使用开关吗?还是更优雅的东西? 提前致谢! 解决方法
至少使用J2SE 1.5转发,您可以为枚举提供额外的属性.这意味着您可以用看起来像的东西替换整个if-else字符串
var2 = var1.getNextInSequence(); 现在,在这种情况下,看起来您希望该属性是对另一个枚举的引用,这会增加一些皱纹,例如,在初始化它们时无法转发引用枚举,但是可能有一个可行的解决方案这条路. 当属性不是同一枚举的其他实例时,这种事情会起作用: public enum Animal { FOX(4),CHICKEN(2),WORM(0); private int countLegs; Animal(int n) { countLegs = n; } public int getLegCount() { return countLegs; } // .. more getters setters etc } 但是当枚举是自我指涉的时候,你必须要小心你的实例的声明顺序.即,这将有一些问题: public enum Animal { FOX(4,CHICKEN),// 'CHICKEN' doesn't exist yet WORM(0,null),CHICKEN(2,WORM); // this actually will compile private int countLegs; private Animal eatsWhat; Animal(int n,Animal dinner) { countLegs = n; eatsWhat = dinner; } public int getLegCount() { return countLegs; } // .. getters,setters,etc } 因此,如果你需要在枚举之间使用循环引用,你必须工作其他东西,但如果没有,你可以使用这种技术,虽然你可能必须订购你的枚举实例,以使其工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |