首页 > 解决方案 > 如何将kotlin中的密封类转换为java

问题描述

我是 kotlin 的新手,如何将此 kotlin 代码转换为 java

sealed class TokenCommandResult {
    class Success(val response: OIDCTokenResponse) : TokenCommandResult()
    class Error(val error: TokenErrorResponse) : TokenCommandResult()
    class Fault(val exception: Throwable) : TokenCommandResult()
}


when (result) {
            is TokenCommandResult.Success -> printToken(format, result.response.oidcTokens.accessToken.value)
}

这就是我想出的,但我需要重复此代码三遍,有没有更简单的方法可以做到这一点?

public static final class Success extends TokenCommandResult {      
      private final OIDCTokenResponse response;

      
      public final OIDCTokenResponse getResponse() {
         return this.response;
      }

      public Success( OIDCTokenResponse response) {
         
      }
   }

标签: kotlin

解决方案


如果您使用的是 Java 16 或更高版本,则可以使用Java 中的密封接口记录来做大致相同的事情。

public sealed TokenCommandResult permits Success, Error, Fault {
    record Success(OIDCTokenResponse response) implements TokenCommandResult {}
    record Error(TokenErrorResponse error) implements TokenCommandResult {}
    record Fault(Throwable exception) implements TokenCommandResult {}
}

它的代码量更接近 Kotlin 版本,但请注意,记录类更类似于 Kotlin data class,而不是常规的 Kotlin 类。

如果你使用的是 Java 16 之前的东西,你可以使用Lombok来减少样板:

@Getter
@AllArgsConstructor
public static final class Success extends TokenCommandResult {      
    private final OIDCTokenResponse response;
}

推荐阅读