Typescript代码转Java实现相关语法疑问求解
代码运行逻辑
这段TypeScript代码的proof函数首先判断条件something是否成立:
- 若成立,直接返回字符串
'given' - 若不成立,先生成
CustomType2类型的变量evidence,再判断evidence是否为有效值:- 是有效值则调用处理函数,返回
CustomType1类型的实例 - 不是有效值则返回
undefined
- 是有效值则调用处理函数,返回
问题解答
1. 代码中?符号的含义
这里的?是JavaScript/TypeScript的三元条件运算符,和Java里的三元运算符语法、作用完全一致,格式为:
条件表达式 ? 条件为真时返回的值 : 条件为假时返回的值
你贴的代码里return evidence ? function(evidence) : undefined等价于:
if (evidence) { return function(evidence) } else { return undefined }
2. proof()函数的返回值具体是什么
函数返回类型声明CustomType1 | 'given' | undefined是TypeScript的联合类型,表示返回值可以是三种类型的任意一种:
- 当
something条件成立时,返回字符串字面量'given' - 当
something不成立且evidence为有效值时,返回CustomType1的实例 - 当
something不成立且evidence为无效值时,返回undefined
三种返回情况都有可能触发。
3. 调用时!proof的含义
!是JavaScript/TypeScript的逻辑非运算符,会先把操作数隐式转换为布尔值,再取反。
在JS/TS里,undefined、null、空字符串、0、NaN会被判定为假值(falsy),其余值都是真值(truthy)。当前场景下proof的可能返回值里只有undefined属于假值,所以!proof等价于判断proof === undefined,也就是判断函数是否返回了空值。
Java适配参考
Java没有原生联合类型支持,你可以用密封类模拟返回结果:
// 密封类定义返回结果 public sealed interface ProofResult permits Given, CustomType1Result, Empty {} public final class Given implements ProofResult {} public final class CustomType1Result implements ProofResult { private final CustomType1 value; // 构造器、getter省略 } public final class Empty implements ProofResult {} // proof方法实现 public ProofResult proof() { if (something) { return new Given(); } CustomType2 evidence = ...; if (evidence != null) { // 对应TS里的evidence真值判断 return new CustomType1Result(process(evidence)); // process对应你代码里的处理函数 } return new Empty(); } // 调用侧判断逻辑 ProofResult proof = proof(); if (proof instanceof Empty || proof instanceof Given) { // 对应原TS的判断逻辑 }
内容的提问来源于stack exchange,提问作者FelipeCruzV10
相关产品推荐
相关产品推荐

