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.Nonnull,javax.annotation.meta.TypeQualifierNickname,javax.annotation.meta.When 类的情况下,Nullable依然可以正常使用,而不会出现类似'ClassNotFoundException'的错误,这是为什么呢?
1
TtTtTtT 2021-01-05 10:17:01 +08:00
简而言之,就是你使用 Nullable 这个注解,创建它的实例时,并不需要使用这几个注解。
这些注解是标注在 Nullable 类上的元数据,只有在读取 Class<Nullable>的注解时才有可能实例化你说的这三个依赖(这取决于这三个注解是不是能在运行时被实例化,详见 @Retention )。 |
2
liuxey 2021-01-05 10:26:21 +08:00
全局搜一下呢,可能你没有直接引用,但其他包可能会引用
我查了下这是 JSR305 里的东西,比如: https://mvnrepository.com/artifact/com.google.code.findbugs/jsr305 |
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 只是一个标记,在反射的时候不存在也不会报错 == 没有 |
4
wangxiaoaer 2021-01-05 10:48:11 +08:00
心疼题主,竟然被踩,帮你点了个赞。
|