我打算启动一个 JEP/JSR 以将替代访问运算符引入 Java 语言规范。我已经确定了提案的外观,现在我想收集有关该提案的反馈(例如,如果我是第 999 个提出这件事的人)。我想最好在实际开始提案之前执行此操作。然而,似乎没有围绕 openJDK 或 Java 社区进程的论坛或论坛。至少我什么也找不到。然而,我确实找到了一个#openjdk IRC 频道,但除了人们进出之外,那里似乎没有任何交流。
如果我想以最少侵入性/侵入性的方式将我的想法传达给其他人,我会选择哪种方式?除了实际启动 JSR 并等待积极反馈之外,没有其他选择吗?
除了实际问题之外,因为有人问到确切的想法是什么:
Java 编程语言允许链接表达式以表示更大表达式中的操作流,并简化对“深度”值的访问。
String fieldText = tableProvider.getTable(tableKey).getRow(rowKey).getField(columnKey).text;
但是,如果
'.'
访问器尝试访问空对象,则会引发 NullPointerException,从而使任何未经检查的访问都有风险。即使这种情况的后备是简单null
的或静态的原始值,开发人员也需要明确地处理所有可能的 NullPointer 场景。或者,他们通常可以捕获NullPointerException
,这需要将返回的值存储到try-catch
块外范围内定义的变量中,以便以后可以在try-catch
语句之外访问它。但是,这也捕获了NullPointerExceptions
在任何访问的方法中抛出的问题,这可能不是有意的。为了避免这种情况,提出了一个新的访问器,它中止链式表达式的解析,以防访问器访问空对象,而是回退到
null
或指定的默认值。
String fieldText = tableProvider.getTable(tableKey)°getRow(rowKey)°getField(columnKey)°text;
int i = tableProvider.getTable(tableKey)°getRow(rowKey)°getField(columnKey)°index ?: (-1);
在此示例中,如果任何调用方法(getTable、getRow 或 getField)返回
null
,则整个链接表达式将终止并返回null
(或-1
),而不是抛出 NullPointerException。
以上是我写的一个普通 JEP/JSR 的动机部分。
°
只是任何运算符的占位符,不会导致任意解释。实际草案还指定了一堆非目标,其中包括
null
不必在意料之外的地方处理null
。- 弃用 NullPointerException。
- 一般替换'.' 访问者。
- 捕获已经抛出的 NullPointerExceptions。
- 通常将其函数中的 Optional 类替换为返回类型。
编辑: 看来我建议的概念已经是 kotlin 的一部分(除其他外),但包含两个功能:“安全导航操作员”和“猫王操作员”。前者是我要重点关注的。