如何比较 Java 中的对象?

BRD*_*oid 0 java android kotlin

我有一个用 Kotlin 编写的数据类,它有服务器错误对象。

如何检查它是哪个对象?

我可以像这样在 Kotlin 中做到这一点

when (failure) {
    is Failure.ServerError -> test()//do something
    is Failure.ServerErrorConflict -> test()//do something
}
Run Code Online (Sandbox Code Playgroud)

我想在 Java 中做同样的事情:

switch (failure) {
    case failure == Failure.ServerErrorConflict:
        break;
}
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误 expression expected

这是我的数据类

sealed class Failure {
    object NetworkConnection : Failure()
    object ServerError : Failure()
    object ServerErrorConflict : Failure()

    /** * Extend this class for feature specific failures.*/
    abstract class FeatureFailure : Failure()
}
Run Code Online (Sandbox Code Playgroud)

请建议如何做到这一点。

Thi*_*esh 5

通常在 Java 中,对象引用与使用instanceof二元运算符的类型进行比较。

在 Java 的未来版本中,对于某些类型,instanceof不需要带有相等检查的if-else 条件,可以使用 switch。提供这种好处的密封类特性目前正在 Java 15预览,并在即将到来的 Java 16 中再次预览

    switch (failure) {
        case NetworkConnection nc -> <do the required operation>
        case ServerError se -> <do the required operation>
        case ServerErrorConflict sec -> <do the required operation>
    }
Run Code Online (Sandbox Code Playgroud)

注意 - switch 表达式

  • break 不需要(不会失败)
  • 可以返回值

Java SE 文档