【问题标题】:Isolate the instantiation of an annotation隔离注解的实例化
【发布时间】:2019-09-12 22:35:07
【问题描述】:

我有一个巨大的 @OpenApi 注释(基本上它是一个 Javalin/Kotlin 端点的文档),它占用了很多行:

@OpenApi(
   summary = "",
   description = "Lists all customers",
   path = "customers",
   queryParams =
   // ...........
   // ...........
   // etc
)
override fun handle(context: Context) {
   // body of the REST handler
}

我必须滚动很多才能看到实际的处理程序。 因此,我想以某种方式隔离它:

@GetCustomersDoc
override fun handle(context: Context) {
   // body of the REST handler
}

我可以接受其他使文档转到其他地方的解决方案。

这将使代码更清晰,文档被隔离。

【问题讨论】:

  • OpenApi 支持注解合成吗?
  • 嗨!只是想检查一下我的提议是否有问题,是否可以澄清一下?
  • 真的很抱歉,我明天上班去看看。我只是忘记了

标签: java kotlin annotations openapi javalin


【解决方案1】:

你可以定义单独的注解:

annotation class MyOwnApi(
    val openApi: OpenApi = OpenApi(
          summary = "",
          description = "Lists all customers",
          path = "customers",
          queryParams =
          // ...........
          // ...........
          // etc
        )
)

annotation class UserOpenApi(
        val openApi: OpenApi = OpenApi(
              summary = "Something",
              description = "Lists all users",
              // ...........
              // ...........
              // etc
            )
    )

优点:

  • 代码分离
  • 可重用的注解类
  • 您甚至可以创建一个构建器类并对其进行测试

缺点:

  • 令人困惑
  • 注解不能继承、扩展类或实现接口
  • 如果直接检查类/对象的@OpenApi可能无法实现或需要复杂的代码更改。在这种情况下,您需要再次进行反射搜索才能从字段中提取注释!

【讨论】:

  • 我认为您评论了错误的帖子?您的帖子也提供了很好的解决方案,但是滚动问题仍然存在,因为您需要向下滚动才能看到帮助方法
  • 已删除错位的评论。无需滚动 btw,只需使用 Android Studio 的 Go To -> Definition 功能。
  • 如何使用那个新注解?
  • @LuísSoares 像往常一样注释你的班级@MyOwnApi class Clazz { ... }
【解决方案2】:

好的,所以您想要的是将 @OpenApi 文档与 REST 处理程序代码分开。您可以通过移除实现而不是移除注释来做到这一点。

因此,在您当前的文件中,所有 @OpenApi 注释与 REST 处理程序代码混合在一起,您可以调用帮助函数,如下所示:

@OpenApi(
   summary = "",
   description = "Lists all customers",
   path = "customers",
   queryParams =
   // ...........
   // ...........
   // etc
)
override fun handle(context: Context) {
   handleGetCustomers(context)
}

然后您将所有 REST 处理程序放在该文件的顶部或另一个文件中以进行更多隔离,这样您就可以在它们之间滚动而没有 @OpenApi 注释的噪音:

// Collected at the top of the file, or in a separate file
fun handleGetCustomers(context: Context) {
    // body of the REST handler
}

然后您可以轻松地在您的 REST 处理程序代码之间滚动,而不会被@OpenApi 干扰。

请注意,您应该使用 Android Studio 的 Go To -> Definition 功能以避免滚动到 handleGetCustomers()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多