4

我打算启动一个 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 的一部分(除其他外),但包含两个功能:“安全导航操作员”和“猫王操作员”。前者是我要重点关注的。

4

1 回答 1

2

JEP 1说:

预计 [...] 典型的新提案将作为一个非正式探索的想法开始,并在特定小组内动摇,然后起草为 JEP 以供进一步审查和评论,然后由该小组负责人以及随后相关领域批准Lead,然后提交给 OpenJDK Lead 接受。一路上的讨论通常会通过电子邮件进行,但审查会议可能对特别大或有争议的提案很有用。

所以基本上这个想法应该通过电子邮件讨论(通常这意味着在邮件列表中)。有一个针对各种主题的Java 邮件列表的大列表。也许你会在那里找到一个与你的提案相关的小组。

我认为大多数语言更改都是由编译器组赞助的,因此他们的邮件列表可能是一个很好的起点,可以进一步了解在哪里讨论甚至引发讨论。

于 2019-07-09T11:46:34.303 回答