当前位置: 首页 > 知识库问答 >
问题:

静态编程语言中如何将几个注解合二为一?

郗奇玮
2023-03-14

我正在尝试使用自定义注释验证RequestBody。

使用下面的配置,我的验证工作正常:

data class PlayerRegistration(
    @field: Email
    val email: String,
    @field: Pattern(regexp = NICK_REGEX)
    @field: Size(min = 5, max = 15)
    val nick: String,
    @field: Pattern(regexp = PASSWORD_REGEX)
    @field: Size(min = 8, max = 20)
    val password: String,
    val birthDate: LocalDate
)

但是当我试图这样总结注释时:

data class PlayerRegistration(
    @field: Email
    val email: String,
    @field: ValidNick
    val nick: String,
    @field: ValidPassword
    val password: String,
    val birthDate: LocalDate
)

@Pattern(regexp = NICK_REGEX)
@Size(min = 5, max = 15)
@Target(AnnotationTarget.FIELD)
private annotation class ValidNick

@Pattern(regexp = EMAIL_REGEX)
@Size(min = 8, max = 20)
@Target(AnnotationTarget.FIELD)
private annotation class ValidPassword

它不起作用。我做错了什么?

共有1个答案

华煜祺
2023-03-14

简而言之:您的方法创建了具有注释的注释——两个级别的嵌套。这不是对注释进行分组的机制。

尝试像注释处理器一样思考。在第一个代码片段中,处理器看到一个字段nick并认为“好的,我知道如何将PatternSize应用于字段”。

在第二段代码中,对于字段< code>nick,它看到< code>ValidNick并认为“我不知道这种类型的注释,也不知道如何将其视为字段约束”。处理器必须知道,它必须转到这个注释的注释,我相信这是不支持开箱即用的。

如果我是你,我不会推动这样的代码结构。IMO会降低可读性,因为为了了解nick的约束,您必须转到代码的其他部分。从理论上讲,它是可重用的,但问题是:你会有多少次重用?

如果你真的想实现类似的东西,而不是注释,我会尝试委托属性。它们允许您拦截二传器,并将此类拦截html" target="_blank">逻辑保留为可重用的类

 类似资料:
  • 我试图转换一些使用Jackson的@JsonSubTypes注释来管理多态性的Java代码。 以下是可用的Java代码: 以下是我认为等效的Kotlin代码: 但我在三行“JsonSubTypes.Type”中的每一行都会出现以下错误: 知道吗?

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 是否可以在中的class中添加一个新的静态方法?通常,由于Kotlin Extensions,这样的事情在Kotlin中是可能的。 我已经尝试在一个名为的文件中执行以下操作: 但<code>数学。无法解析同伴。。。

  • 如何将注释实例传递给函数? 我想调用java方法

  • 正如标题所说,我正在尝试将Java和Kotlin混合在一个项目中。这里有一个很好的例子。混合java kotlin hello world。除了kotlin在src/main/Java/somepackage/SomeClass中找不到我的任何Java类之外,所有的东西都正常工作。Java语言 这是什么原因? 我的身材。gradle看起来像这样 而不是开始尝试在更大的项目上实现这一点。我试图通过创

  • 我有以下问题:-创建了几个模块来实现类,并用-我的Android应用程序正在使用检索这些类。但是由于某种原因,没有在