Java中能否通过单个三元运算符同时返回多个值?
结论
截至当前最新的LTS版本Java 21,Java不存在原生的多变量解构赋值语法,你期望的单次三元运算同时为多个变量赋值的写法暂时无法直接实现。
替代实现方案
- 方案1:使用单次
if-else分支判断,仅执行一次条件判断即可完成所有变量赋值,无额外性能开销,逻辑清晰易读:
int a; String b; if (Condition) { a = 1; b = "success"; } else { a = 0; b = "error"; }
和你当前使用两次三元运算符的写法相比,该方案还避免了Condition被重复执行两次的问题,如果Condition是包含复杂计算的表达式,可降低不必要的性能损耗。
- 方案2:如果你偏好类元组的写法,可使用Java 16及以上版本支持的
record自定义泛型元组,实现单次三元运算返回多个结果值:
首先定义可复用的通用双属性元组:
public record Pair<T1, T2>(T1 first, T2 second) {}
赋值逻辑如下:
Pair<Integer, String> result = Condition ? new Pair<>(1, "success") : new Pair<>(0, "error"); int a = result.first(); String b = result.second();
该写法更贴近你期望的语法形式,仅执行一次条件判断就可以拿到所有对应值。
目前多变量解构赋值特性已经在Kotlin、Scala等JVM生态语言中落地实现,但Java官方尚未公布相关特性的开发计划,短期内大概率不会支持原生的类似语法。
内容的提问来源于stack exchange,提问作者Ragu
相关产品推荐
相关产品推荐

