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注释,但我对此表示怀疑。