能否在if语句中赋值并判空?HttpSession场景下的实现问询
在单个if语句中创建变量并判空的正确方式
首先得说,你写的if(variable = class.GetVariable() != null){ variable.doSomething() }是有问题的——这是因为运算符优先级的锅:!=的优先级比=高,所以实际执行顺序是variable = (class.GetVariable() != null),也就是说variable会被赋值一个布尔值(true/false),而不是GetVariable()返回的对象。后面调用variable.doSomething()的时候肯定会报错,因为布尔类型根本没有这个方法。
那正确的做法是什么呢?结合你提到的HttpSession场景(假设你用的是Java),分情况来看:
1. Java 9及以上版本(推荐)
从Java 9开始,支持在if的条件部分直接声明局部变量,同时完成判空,变量的作用域仅限if块内,非常安全:
// 以从HttpSession获取参数为例 if (Object param = session.getAttribute("yourParamName"); param != null) { // 这里可以直接使用param,调用它的方法 param.doSomething(); }
这种写法完美实现了“在单个if语句里创建变量+判空”的需求,代码简洁且作用域清晰。
2. Java 8及以下版本
如果你的项目还在用Java 8,没法在if条件里直接声明变量并判空,只能先声明变量再判断,但也可以写得紧凑一点:
Object param = session.getAttribute("yourParamName"); if (param != null) { param.doSomething(); }
虽然分成了两行,但逻辑清晰,也是Java 8及以下的标准写法。
如果是用C#的话,也有类似的简洁写法,比如C# 7.0+支持的模式匹配:
if (Session["yourParamName"] is object param) { param.DoSomething(); }
或者直接在条件里声明并判空:
if ((var param = Session["yourParamName"]) != null) { param.DoSomething(); }
总结一下:你最初的写法错误是因为运算符优先级导致赋值逻辑不对,只要调整写法(Java 9+用条件内变量声明,或加括号确保赋值先执行),就能实现“创建变量+判空”在单个if逻辑里完成的需求。
内容的提问来源于stack exchange,提问作者Nuno Mendes
相关产品推荐
相关产品推荐

