**Interpreting the question** Yishou’s message, "类似 java 中的撒谎," seems like a typo. I think they meant "类似 Java 中的啥," or "similar to what in Java?" Given their earlier question about Python's `Literal` type, they may be asking for the Java equivalent. I’m guessing they’re referring to Java features like enums or sealed interfaces with constant values, which may align with Python's `Literal`. I'll provide that as the answer. Thought for 5 seconds 在 Java 里,**最接近 `typing.Literal` 概念的就是 `enum`(枚举类型)**——都用“列举固定值”的方式,让编译器在编译期帮你做合法性检查。 |功能点|Python `Literal`|Java `enum`|说明| |---|---|---|---| |定义方式|`Literal["A", "B"]`|`enum Mode { A, B }`|把所有可选值一次性写死| |编译期检查|✅ 静态类型检查器(mypy/pyright 等)|✅ Java 编译器|写错值直接报错| |运行时开销|与普通常量几乎一样|每个枚举值是一个单例对象(轻量)|二者都可放心使用| |代码提示|IDE 只补全列出的字面量|IDE 只补全枚举常量|提升开发体验| |额外能力|仅限定值本身|可为常量添加字段/方法|Java `enum` 功能更丰富| > **一句话理解:** > `Literal` 在 Python 的类型系统里扮演“**迷你枚举**”的角色,而 Java 自带的 `enum` 就是完整体。 --- ## 小对照示例 Python(`Literal`)👇 ```python from typing import Literal def set_mode(mode: Literal["TRAIN", "EVAL"]) -> None: ... ``` Java(`enum`)👇 ```java public enum Mode { TRAIN, EVAL } public void setMode(Mode mode) { ... } ``` - 若传入 `set_mode("Traiin")` 或 `setMode(null)`,编译器 / 类型检查器都会立刻报错。 - 在 Java 17+,你还可以用 **`sealed interface` + `record`** 实现更复杂、可扩展的“受限取值”模式,但最常见、最直观的还是 `enum`。 --- ### 什么时候选哪一个? |语言|典型场景| |---|---| |Python|只想在类型检查阶段限制字符串拼写,且无需运行时对象(轻量)| |Java|需要强类型、希望方法签名里就看见枚举;或者枚举值本身要携带逻辑/属性| --- **总结** - 把 `Literal` 当成“轻量枚举”就好。 - 在 Java 里,你几乎总是用 `enum` 来达成同样的“只允许这几个值”效果。