由于Java中没有类型文字,因此通常使用TypeToken
技巧。
比如说,您希望得到一个代表Type
的{{1}}实例,您可以这样做:
List<String>
现在,我想知道是否有类似的技巧可以获得new TypeToken<List<String>>(){}.getType()
的实例。例如,代表AnnotatedType
甚至List<@NonNull String>
。
修改
Here's a full AnnotatedType
-enabled TypeToken
implementation,由GeAnTyRef提供。
要点:
@NonNull List<@NonNull String>
答案 0 :(得分:1)
只需创建一个类型标记 - 或带注释类型参数的任何匿名子类 - 使用注释和then use reflection来提取带注释的类型。
请注意,这仅适用于具有运行时保留的注释。
使用链接答案中的fullType()
方法:
List<?> token = new ArrayList<@NonNull String>() {};
fullType("", token.getClass().getAnnotatedSuperclass());
打印
java.util.ArrayList
<
@org.checkerframework.checker.nullness.qual.NonNull()
java.lang.String
>