[英]How to get generic type information from getAnnotatedParameterTypes() in Java 8?
[英]Why getAnnotatedParameterTypes does not see annotations for array type?
出於某種原因,我不明白為什么這個代碼打印true
和false
,有什么特別之處陣列,它不包括這里的注釋?
如果您使用getParameters
它會按預期工作。
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE_USE, ElementType.PARAMETER})
@interface Lel {
}
class Test {
public static void a(@Lel String args) {}
public static void b(@Lel String[] args) {}
public static void main(String[] args) throws Exception {
System.out.println(Test.class.getDeclaredMethod("a", String.class)
.getAnnotatedParameterTypes()[0].isAnnotationPresent(Lel.class));
System.out.println(Test.class.getDeclaredMethod("b", String[].class)
.getAnnotatedParameterTypes()[0].isAnnotationPresent(Lel.class));
}
}
在帶注釋的類型@Lel String[]
,注釋適用於元素類型String
。 要注釋數組類型,可以使用String @Lel []
。
JLS在§9.7.4中包含了一些這樣的例子:
類型注釋可以應用於數組類型或其任何組件類型(第10.1節 )。 例如,假設
A
,B
和C
是使用@Target(ElementType.TYPE_USE)
元注釋的注釋類型,則給出字段聲明:@C int @A [] @B [] f;
@A
適用於陣列式int[][]
@B
適用於它的部件類型int[]
和@C
適用於元素類型int
。 有關更多示例,請參見§10.2 。此語法的一個重要屬性是,在兩個僅在數組級別數不同的聲明中,類型左側的注釋引用相同的類型。 例如,@
@C
在以下所有聲明中都適用於int
類型:@C int f; @C int[] f; @C int[][] f;
此外,如果聲明注釋的方式允許它定位參數聲明本身以及類型,則getParameters()
將用於檢索注釋。 JLS§9.7.4更詳細地解釋了確定注釋以確定類型,聲明或兩者的目標的條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.