generics - 具有高阶功能的异常处理/抑制

标签 generics kotlin

我在微服务架构中有一个应用程序。该应用程序从不同的源获取数据,并且从其他各种应用程序获得许多不同的错误响应。某些异常(例如404-Not Found异常)可以引发并返回给最终用户,但其他异常(错误请求,++)不能并且需要通过抛出其他异常来抑制。

但是,我知道这可以通过try-catch记录异常并调节引发该问题的方式来解决,但这会涉及很多代码。有时我想接受4-5个不同的异常,而其他时候只接受1-2个异常(exception)。

无论如何..我需要一些帮助使功能更高级。我想要一个将一个或多个“可接受的异常”作为参数(它们是Runtime-exceptions)并仅将批准的异常抛出try-catch的函数。

这是我尝试过的,但是似乎语法(伪代码atm。)没有正确的语法。任何帮助都非常感谢。

  fun getData() {
    return supressExceptions(
        NotFoundException::class.java, 
        ForbiddenException::class.java, 
        AuthorizationException::class.java) {
      service.getData()
    }
  }

  private inline fun <T, X : RuntimeException> supressExceptions(vararg approvedException: Class<X>, block: () -> T): T =
      try {
        block()
      } catch (ex: Exception) {
        // Loop through the approved exceptions.
        // Throw the approved exception
        throw ex
        // ELSE: do something else if the exception is not approved.
      }

最佳答案

以下是您要找的东西吗?

private inline fun <T> supressExceptions(vararg approvedException: Class<out RuntimeException>, block: () -> T): T =
        try {
            block()
        } catch (ex: Exception) {
            if (approvedException.contains(ex::class.java)) {
                // Approved exception
                throw ex
            }
            // ELSE: do something else if the exception is not approved.
            else throw Exception("Something else")
        }

关于generics - 具有高阶功能的异常处理/抑制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54321577/

相关文章:

Java 泛型 - 获取对参数的访问

android - Kotlin 将对象转换为另一个对象

android - https ://dl. bintray.com/kotlin/kotlin-eap 502 网关错误

android - 导航 Jetpack Compose 时应用程序崩溃

android - Kotlin 扩展 Unresolved 引用

java - 不使用原始类型无法获得泛型的类对象

Java 从泛型 Class 对象获取方法

database - 从数据库获取数据并填充数组的Golang抽象函数

java - 自引用泛型并取回您自己的实例

inheritance - 如何对数据类使用简单继承?