Java 教程說明了以下內容:
如果注解型別 T 上不存在 @Target 元注解,則型別 T 的注解可以寫為除型別引數宣告之外的任何宣告的修飾符。
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/annotation/Target.html
其他手冊說,如果 @Target 不存在,則可以在除 TYPE_USE 或 TYPE_PARAMETER 場景之外的任何地方使用注釋。
在這種情況下,我不太確定“引數宣告”是什么意思。此類編譯,并且注釋“@EveryWhere”實際上無處不在,沒有任何@Target 注釋。包括強制轉換操作、lambda 引數和泛型宣告。
import java.util.ArrayList;
import java.util.function.Predicate;
@interface EveryWhere{}
public @EveryWhere class AnnotedEveryWhere<@EveryWhere T> extends @EveryWhere Object{
@EveryWhere int i = 0;
@EveryWhere <@EveryWhere T> String method(@EveryWhere ArrayList<@EveryWhere String> array) {
@EveryWhere Predicate<@EveryWhere ArrayList<@EveryWhere String>> pred =
(@EveryWhere ArrayList<@EveryWhere String> lambdaParameter)->{
@EveryWhere ArrayList<@EveryWhere String> insideLambda = new @EveryWhere ArrayList<@EveryWhere String>();
return (@EveryWhere boolean) true;};
return (@EveryWhere String) "String";
}
}
uj5u.com熱心網友回復:
這取決于 Java 版本。Java SE 18 說
如果注解介面 T 上不存在 @Target 元注解,則型別 T 的注解可以寫為任何宣告的修飾符。
不幸的是, https: //javaalmanac.io 沒有在必要的細節級別上進行差異,以找出它更改了哪個版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460321.html
