gpt4 book ai didi

java - 使用将 @Target 设置为 TYPE 的注释

转载 作者:行者123 更新时间:2023-12-01 13:15:11 27 4
gpt4 key购买 nike

我试图弄清楚将 TARGET 设置为 TYPE 的用途。 导入 java.lang.annotation.ElementType; 导入java.lang.annotation.Retention; 导入 java.lang.annotation.RetentionPolicy; 导入java.lang.annotation.Target; 导入java.util.Map;

@Retention(RetentionPolicy.SOURCE)
@Target({ ElementType.TYPE })
@interface A1 {
}

@A1
class Y {}

class X {
void foo() {
Map<@A1 Y, String> y1; // ERROR: The Annotation is disallowed at the
// location
}
}

oracle docs列表:ElementType.TYPE 可以应用于类的任何元素。

是不是意味着可以应用到类的字段上。如果是这样的话我可以将@Target 设置为@Target ({ ElementType.FIELD })。

为什么我需要 ElementType.TYPE。

JSR 308列表

A type annotation appears before the type’s simple name, as in @NonNull String or java.lang.@NonNull String. Here are examples:

for generic type arguments to parameterized classes:

Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

所以问题是设置为 ElementType.TYPE 的目标类型在哪里有用并且这也可能会回答我收到的错误。

最佳答案

嗯...教程中的解释

ElementType.TYPE can be applied to any element of a class

确实是错误的。我也理解“类的任何元素”这句话,就好像你可以将此注释放在任何成员上一样。这是错误的。

这是 ElementType.TYPE 的 Javadoc 注释:

Class, interface (including annotation type), or enum declaration

它正在谈论类型声明。没有其他的。根据您提到的其他使用场景,请查看 Java 8(嘿,它已经发布两天了)。 ElementType枚举现在知道两个附加常量:TYPE_PARAMETERTYPE_USE。我想,这就是你的想法。

关于java - 使用将 @Target 设置为 TYPE 的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22525939/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com