V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
JCJD
V2EX  ›  问与答

关于 spring 注解 Nullable 使用的困惑

  •  
  •   JCJD · 2021-01-05 09:21:31 +08:00 · 1233 次点击
    这是一个创建于 1420 天前的主题,其中的信息可能已经有所发展或是发生改变。
    package org.springframework.lang;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    // 在我的项目中未引入下面三个依赖
    import javax.annotation.Nonnull;
    import javax.annotation.meta.TypeQualifierNickname;
    import javax.annotation.meta.When;
    
    @Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Nonnull(when = When.MAYBE)
    @TypeQualifierNickname
    public @interface Nullable {
    }
    

    在缺少 javax.annotation.Nonnulljavax.annotation.meta.TypeQualifierNicknamejavax.annotation.meta.When 类的情况下,Nullable依然可以正常使用,而不会出现类似'ClassNotFoundException'的错误,这是为什么呢?

    4 条回复    2021-01-05 10:48:11 +08:00
    TtTtTtT
        1
    TtTtTtT  
       2021-01-05 10:17:01 +08:00
    简而言之,就是你使用 Nullable 这个注解,创建它的实例时,并不需要使用这几个注解。
    这些注解是标注在 Nullable 类上的元数据,只有在读取 Class<Nullable>的注解时才有可能实例化你说的这三个依赖(这取决于这三个注解是不是能在运行时被实例化,详见 @Retention )。
    liuxey
        2
    liuxey  
       2021-01-05 10:26:21 +08:00
    全局搜一下呢,可能你没有直接引用,但其他包可能会引用

    我查了下这是 JSR305 里的东西,比如: https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305
    yannxia
        3
    yannxia  
       2021-01-05 10:27:16 +08:00
    找到了题主的英文问题: https://stackoverflow.com/questions/65561493/i-have-a-problem-with-springs-nullable-annotaion

    也找到了答案: https://stackoverflow.com/questions/3567413/why-doesnt-a-missing-annotation-cause-a-classnotfoundexception-at-runtime/3568041

    大概意思也就是 这个 MetaAnnoation 只是一个标记,在反射的时候不存在也不会报错 == 没有
    wangxiaoaer
        4
    wangxiaoaer  
       2021-01-05 10:48:11 +08:00
    心疼题主,竟然被踩,帮你点了个赞。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1378 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:35 · PVG 01:35 · LAX 09:35 · JFK 12:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.