在Java 14和Java 17中使用instanceof的区别

4

我的代码在Java 17上的IntelliJ中运行良好,但在Java 14上返回以下行的错误:

if (this.areas.get(i) instanceof Habitat area) {

它会返回以下错误:

java: pattern matching in instanceof is a preview feature and is disabled by default.

如何调整此行以使其在Java 14中正常工作?我知道我使用这个特性的方式只适用于Java 16及以上版本。


2
正如另一位用户所指出的那样,这在 https://dev59.com/17voa4cB1Zd3GeqPxyET/ 中有描述,其中告诉您如何使用启用了此功能的Java 14。如果您不想启用该功能,则必须声明 area 并进行转换。 - Dawood ibn Kareem
2个回答

7

您有两个选项。

(1) 您可以启用Java 14中的预览功能,方法是使用以下编译命令:

javac MainClass.java --enable-preview --release 14

并运行

java MainClass --enable-preview

(2) 你写的那行代码等同于这行代码。

if (this.areas.get(i) instanceof Habitat) {
    Habitat area = (Habitat) this.areas.get(i);

    // ... more here

假设这个get方法没有任何负面影响。如果你不想启用预览功能,就可以按照以下步骤进行操作。

3

传统的方法是测试 instanceof 然后将其转换为所需的类型:

if(this.areas.get(i) instanceof Habitat) {
  Habitat area = (Habitat) this.areas.get(i);
// rest of the if block

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接