You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ArchUnit接口命名规则,使其仅作用于普通接口而排除注解(@interface)类

如何配置ArchUnit接口命名规则,使其仅作用于普通接口而排除注解(@interface)类

这个问题我之前也碰到过,ArchUnit里的areInterfaces()方法默认会把Java中的**注解类(@interface)**也归类为接口类型(毕竟字节码层面注解确实是一种特殊的接口),所以你的初始测试会误判注解类。只需要在条件里添加一个过滤规则,排除注解类就行啦!

修改后的测试代码

@Test
void interfacesShouldHaveNamesEndingWithTheWordInterface() {
    classes()
        .that()
        .areInterfaces()
        .and()
        .areNotAnnotations() // 关键:添加这一行排除注解类
        .should()
        .haveNameMatching(".*Interface")
        .check(importedClasses);
}

代码说明

  • areInterfaces():匹配所有接口类型(包括普通接口和注解类)
  • areNotAnnotations():ArchUnit提供的现成谓词,专门用来过滤掉注解类,能精准区分普通接口和注解
  • 组合这两个条件后,规则就只会作用于普通的interface定义,不会影响@interface注解类

这样调整后:

  • 符合命名规范的AnimalInterface会通过检查
  • 未以Interface结尾的Animal普通接口会触发测试失败
  • ValidSomething这类注解类会被完全忽略,不会纳入检查范围

备注:内容来源于stack exchange,提问作者PatPanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 09:50:31