我正在摆弄JavaFX并进入一个网页,其中列出了所有不同类型的对话框,以及使用的内容的创建者:
Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog");
alert.setHeaderText("Look, a Confirmation Dialog");
alert.setContentText("Are you ok with this?");
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
// ... user chose OK
} else {
// ... user chose CANCEL or closed the dialog
}
我所做的是以下内容:
alert.showAndWait();
if (alert.getResult() == ButtonType.OK)
{
//User chose OK
}
else
{
//User chose other
}
我阅读了大多数这些方法和类的文档,我可以从中收集的是,如果方法Optional
返回showAndWait()
,他会使用null
。根据文档,showAndWait()
方法会返回Optional.ofNullable
,null
可能是也可能不是Optional<ButtonType>
。然后在if语句中,他从showAndWait()
获得结果,其中包含返回的Alert
并将其进行比较。
在我的部分代码中,我直接从getResult()
实例获取showAndWait()
的结果并对其进行比较,这可能是错误的,因为showAndWait()
可能会返回null。
额外:如果有人能告诉我Optional<R>
的返回类型是什么意思,它会返回:E
,我将非常感激。我假设它是一种通用类型,但我以前从未见过,我只看到T
N
c.moveToNext()
等。< / p>
感谢您对此提出任何意见。
答案 0 :(得分:3)
这是主要区别吗?
没有。请参阅Dialog
的javadoc中的以下评论下面显示的是三个代码段,显示了三种同样有效的方式 显示对话框:
选项1:“传统”方法Optional<ButtonType> result = dialog.showAndWait(); if (result.isPresent() && result.get() == ButtonType.OK) { formatSystem(); }
选项2:传统+可选方法
dialog.showAndWait().ifPresent(response -> { if (response == ButtonType.OK) { formatSystem(); } });
选项3:完全lambda方法
dialog.showAndWait() .filter(response -> response == ButtonType.OK) .ifPresent(response -> formatSystem());
上面列出的三个选项没有更好或更差的选择,所以 鼓励开发人员根据自己的风格偏好进行工作。该 显示上述目的是为了帮助介绍开发人员 可选API,它是Java 8中的新增功能,对许多人来说可能是陌生的 开发者。
防止null?
使用isPresent()
或ifPresent()
的所有选项都存在保护。
还是有另一个原因可以解释为什么使用Optional会比其他更好?
没理由。 {8}引入了Java 8 - Oracle的人希望开发人员尽快熟悉它。虽然使用第三方API已将相同的功能引入“Java World”,但现在它已成为JDK本身的一部分。您可以在在线博客上阅读其优势等,例如Optional
。
如果有人能告诉我showAndWait()的返回类型是什么,我会非常感激,它会返回:Optional<R>
。
R
是类型参数(或类型变量),其中“R”代表“ R esult”。它可以是任何(X
,RE
,Rezult
等),它们不会与类路径中的保留Java关键字或类名冲突;通常它按照惯例是单个大写字母:
Tired of Null Pointer Exceptions?
类型参数命名约定
按照惯例,类型参数名称是单个大写字母。这与您已经了解的变量Java Tutorials > Generics > Generic Types:约定形成鲜明对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称。< / p>
最常用的类型参数名称是:
- E - Element(Java Collections Framework广泛使用)
- K - Key
- N - 数字
- T - Type
- V - 值
- S,U,V等 - 第2,第3,第4类
您将在整个Java SE API和本课程的其余部分中看到这些名称。