Java 类型\对未编译到类文件中的泛型类型使用注释
我想为一个负载定义一个泛型类,该负载包含多个Java 类型\对未编译到类文件中的泛型类型使用注释,java,generics,annotations,spring-annotations,Java,Generics,Annotations,Spring Annotations,我想为一个负载定义一个泛型类,该负载包含多个@有效元素,由我的spring boot应用程序验证@有效。全班同学要去图书馆 如果我定义的泛型类如下所示: class GroupPayload<T> { @Size(min = 1) List<@Valid T> data; } class GroupPayload<T> { @Size( min = 1 ) private List<T> data;
@有效
元素,由我的spring boot应用程序验证@有效
。全班同学要去图书馆
如果我定义的泛型类如下所示:
class GroupPayload<T> {
@Size(min = 1) List<@Valid T> data;
}
class GroupPayload<T> {
@Size(
min = 1
)
private List<T> data; // T is not @Valid !?
}
class-GroupPayload{
@大小(最小值=1)列表数据;
}
编译时,类文件如下所示:
class GroupPayload<T> {
@Size(min = 1) List<@Valid T> data;
}
class GroupPayload<T> {
@Size(
min = 1
)
private List<T> data; // T is not @Valid !?
}
class-GroupPayload{
@大小(
最小值=1
)
私有列表数据;//T不是@Valid!?
}
即使@Size
已写入类文件,@Valid
注释(两个注释都具有@Retention(RUNTIME)
),T
在编译的类中未使用@Valid
键入
如果我使用MyGroupPayload扩展了GroupPayload
,验证不会对元素触发,但如果我使用带有列表数据的硬编码(非泛型)类,则验证有效
如何将泛型类型上的TYPE_USE注释获取到已编译类中,以便将其用作即时项目之外的库类。注释被编译到类文件中。
我怀疑您用来检查类文件的任何工具都有缺陷
这里是一个MWE:
import java.util.List;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target(ElementType.TYPE_USE)
@interface Valid{}
public class GroupPayload<T> {
List<@Valid T> data;
}
如下所示。您可以从以下代码片段中看到:
...
#9 = Utf8 LValid;
...
java.util.List<T> data;
...
RuntimeInvisibleTypeAnnotations:
0: #9(): FIELD, location=[TYPE_ARGUMENT(0)]
@Valid
应用于数据
字段时是否无效?@ernest_k否,hibernate验证要求T
在验证列表
时具有注释。这是一个过于简单的示例,不是我真正的示例,但它确实说明了TYPE_USE注释没有编译到类文件中。请看一下,这可能是重复的:@ernest_k感谢您提供的链接。这当然是相关的,但事实是,当类被编译到库中并在另一个项目中使用时,hibernate看不到注释。检查类文件可以确认注释不存在。这可能是因为我的类检查器(Intellij)没有显示type_use注释,但我对此表示怀疑。