kotlin - 如何将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) {
}
}
解决方案
如果您使用的是 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;
}
推荐阅读
- django - Favicon 未在 Django 中加载
- .net - 我应该使用哪个版本的 .NET Framework?
- flutter - 颤振上的任何小部件可以显示麦克风均衡器的视觉显示?
- android - 检索 blob 时 SQLite 数据库中的异常
- laravel - 如何将旧路由的http请求转发到保留http方法和查询的新路由
- python - 如何执行多个进程以异步计算值并在完成后收集结果?
- sql-server - 在 ASP 经典 SQL 查询中使用特殊字符
- python - Python。发生异常:IndexError。列表索引超出范围
- c++ - 引用和指向数组的指针有何不同,哪一个更可取?
- asp.net-core-webapi - 使用 NSwag.AspNetCore 和 AddOpenApiDocument 的示例请求