Java 语法糖的探讨: 如何简化没有 else 的 if 语句写法

日期 : 2021-04-10 17:22:56作者 : 望京博格



//java 中 对于有返回值的语句是必须要赋值给一个对象的。
//也就是说


//这个语句是编译不过的
1==1;

// 这样通过短路的方式去简化 if 语句是不行的
1==2&&method();

//所以对于没有返回值的 if 语句只能老实的写成
if(1==2)
  method();
  
//但是这样的话如果放到 lamda 表达式中就会让语句变得很复杂

//理想状态 1
list.foreach(val->1==2&&method(val));

//理想状态 2 这里的 void 表示没有任何操作,java 也不支持这种空操作
list.foreach(val->1==2?method(val));
list.foreach(val->1==2?method(val):void);

//现实
list.foreach(val->{
if(1==2)
  method(val);
});


所以有什么更好的办法吗?

你可以写个静态方法
public class Utils {
public static <T, R> R ifTrueThenDo(boolean b, T params, Function<T, R> callback) {
if (b) {
return callback.apply(params);
}
return null;
}
}

然后在别的类里引入:
import static xxx.Utils.ifTrueThenDo;

接下来你就可以一行语句完成你的这些功能了, 比如:
ifTrueThenDo(1==2, val, (val) -> method(val))

标签 :