代码中怎么避免if else啊

bolink5 2010-08-18 03:19:29
在开发中 if else 实在是多啊
刚敲完代码,看了下 又发现N多个 if else啊
希望大家给个好的建议啊。
有段时间没发帖了,顺便散点分、、、
...全文
1100 点赞 收藏 72
写回复
72 条回复
雨天wxp 2011年11月22日
if () {
if () {
if () {
}else {}
}else {
}
}

解决:
写一个方法:
public static Integer isArrBoolean(boolean[] bs){
Integer flag = 0;
for(int i=0;i<bs.length;i++) {
if (!bs[i]) break;
flag++;
}
return flag;
}

程序中调用:
boolean b1 = Utils.toNa(map.get("opId")) >0;
boolean b2 = Utils.toNa(map.get("roleId")) >0;
boolean b3 = Utils.toNa(map.get("topId")) >0;
boolean[] bs = {b1,b2,b3};
int flag = Utils.isArrBoolean(bs);

switch (flag) {
case 1: sb.append(" and m.operator.opId =").append((Integer)(map.get("opId")));break;
case 2: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId")));
sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")");
break;
case 3: sb.append(" and (m.role.roleId =").append((Integer)(map.get("roleId")));
sb.append(" or m.toOper.opId =").append((Integer)(map.get("topId")));
sb.append(" or m.operator.opId =").append((Integer)(map.get("opId"))).append(")");
break;
default: break;
}
回复 点赞
jerryfeng13 2011年11月03日
我是来学习的,if else过多,就用些return,和switch吧。
回复 点赞
zhoupin 2010年08月24日
学习了
回复 点赞
luojihaidao 2010年08月24日
[Quote=引用 2 楼 soli11722984 的回复:]
enum
[/Quote]

比较固定的用。
回复 点赞
zhfaston 2010年08月24日
我是来学习的
回复 点赞
安心逍遥 2010年08月24日
能用条件三元运算符
用switch
回复 点赞
soft53ears 2010年08月24日
太多if else的情况,用三目运算符很难阅读
回复 点赞
bolink5 2010年08月23日
呵呵 谢谢你们的回复啊 可惜已经结贴了啊
回复 点赞
longshen131x 2010年08月23日
用swith
回复 点赞
East271536394 2010年08月23日
设计模式:
switch 用Adapter


设计模式
回复 点赞
bidiya 2010年08月23日
那用case..
回复 点赞
max_ya 2010年08月23日
如果没有了如果,但是还有很多但是
回复 点赞
bolink5 2010年08月22日
这几天玩了下 忘结贴了
谢谢大家的建议啊
回复 点赞
bolink5 2010年08月20日
[Quote=引用 35 楼 hudie1234567 的回复:]

曾经听人说过,如果你的代码中,有很多的if...else的话,说明你的代码面向对象不好!或许是认识肤浅吧,我还是认为if和else都是逻辑判断必须的!楼上有几位兄弟说的,用switch替换,个人和if一样的!没有什么本质的区别!
[/Quote]

是啊 代码写了几年了啊 工作2年了啊 可发现代码还是if else啊 看起来很不爽 啊
气愤啊 大家有好的方法再说说吧 分可以再加的
回复 点赞
izard999 2010年08月20日
条件判断无法避免的, 充其量只是换下形式而已.!
if else 无所谓.! 但是尽量不要嵌套, 嵌套多了把你自己都套晕了的
LS的说的if return是个比较好避免嵌套的解决方案!
回复 点赞
steel1985 2010年08月20日
学习 支持下
回复 点赞
猿敲月下码 2010年08月20日
package com.csdn;

interface Animal {
void speak();
}

class Dog implements Animal {
@Override
public void speak() {
System.out.println("dog speak.");
}
}

class Cat implements Animal {
@Override
public void speak() {
System.out.println("cat speak.");
}
}

class Pig implements Animal {
@Override
public void speak() {
System.out.println("pig speak.");
}
}

public class NoIfElse {
// 比方说现在有个需求,
// 通过state状态来判断那种动物叫
// 0让狗叫,1让猫叫,2让猪叫

/**
* 方法1
*/
private void animalSpeak(int state) {
Animal[] animals = { new Dog(), new Cat(), new Pig() };
animals[state].speak();
}

/**
* 方法2,没有用到Animal接口
*/
private void animalSpeak2(int state) {
if (state == 0) {
new Dog().speak();
}
if (state == 1) {
new Cat().speak();
}
if (state == 2) {
new Pig().speak();
}
}

public static void main(String[] args) {
NoIfElse t = new NoIfElse();
int state = 1;

t.animalSpeak(state);

t.animalSpeak2(state);
}
}


LZ比较下方法1和方法2
回复 点赞
猿敲月下码 2010年08月20日
不建议使用过多的if else ,switch. 因为可扩展性差,而且难维护.

可以尝试用多态
回复 点赞
酒剑仙 2010年08月20日
没有IF 就没有业务!
回复 点赞
zhy0511 2010年08月20日
能用switch的时候不用if...else啊,效率高些嘛!
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告