首页 > 解决方案 > instanceof 的使用在 NetBeans 11.3 + OpenJDK 14 中

问题描述

OpenJDK 更新到 14 后,instanceof语法得到了扩展,所以现在我们可以使用模式:RelationalExpression instanceof Pattern. 更多信息在这里。在 NetBeans 11.3 中,我注意到instanceof <pattern> can be used here此方法附近的提示:

public String getTLSCipherSuite() {
    if (socket instanceof SSLSocket) {
        return ((SSLSocket) socket).getSession().getCipherSuite();
    }
    return null;
}

如果我将引用类型更改为模式,我会看到 NetBeans 错误:

public String getTLSCipherSuite() {
    if (socket instanceof SSLSocket sslSocket) {//<--- ")" expected
        return sslSocket.getSession().getCipherSuite();
    }
    return null;
}

也许是 NetBeans 错误?

标签: javainstanceof

解决方案


仅当 NetBeans 11.3 本身在 Java 14 javac 上运行时才能使用此 JDK 14 功能,而不是在与 NetBeans 11.3 一起打包的 nb-javac 上运行。还必须设置 java 编译器的 --enable-preview 标志。有关详细信息,请参阅https://netbeans.apache.org/download/nb113/index.html。当然,在 javac 而不是 nb-javac 上运行 NetBeans 意味着失去 nb-javac 的优势。有关权衡的讨论,请参阅https://blogs.apache.org/netbeans/entry/what-s-nb-javac-in中的链接。instanceof 语法仍被列为 JDK 15 中的预览功能,因此无法保证它在未来的 Java 版本中不会改变。


推荐阅读