मैं निम्नलिखित कोड का व्यवहार नहीं मिलता है: https://gist.github.com/tomaszalusky/3e3777b4fd0c6096f3f707bb19b50b52 - एम्बेडेड देखें:जेनेरिक प्रकार तर्क पर एनोटेशन नेस्टेड प्रकार के लिए क्यों दिखाई नहीं दे रहा है?
import java.lang.reflect.*;
import java.util.*;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
public class AnnotationOnTypeArgument {
@Target({ElementType.FIELD,ElementType.PARAMETER,ElementType.METHOD,ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Anno {
}
interface Nested<T> {
}
Toplevel<@Anno Integer> toplevel;
Nested<@Anno Integer> nested;
public static void main(String[] args) throws Exception {
print(AnnotationOnTypeArgument.class.getDeclaredField("toplevel"));
print(AnnotationOnTypeArgument.class.getDeclaredField("nested"));
}
private static void print(Field field) {
AnnotatedType annotatedType = field.getAnnotatedType();
AnnotatedParameterizedType annotatedParameterizedType = (AnnotatedParameterizedType)annotatedType;
ParameterizedType parameterizedType = (ParameterizedType)annotatedParameterizedType.getType();
AnnotatedType argType = annotatedParameterizedType.getAnnotatedActualTypeArguments()[0];
System.out.printf("field %s%ntype=%s%nannotatedType=%s%nannotations=%s%ntype=%s%n%n",
field.getName(), parameterizedType, argType, Arrays.asList(argType.getDeclaredAnnotations()), argType.getType());
}
}
interface Toplevel<T> {
}
संपादित करें: वास्तविक परिणाम है:
field toplevel
type=Toplevel<java.lang.Integer>
annotatedType=su[email protected]1540e19d
annotations=[@AnnotationOnTypeArgument$Anno()]
type=class java.lang.Integer
field nested
type=AnnotationOnTypeArgument.AnnotationOnTypeArgument$Nested<java.lang.Integer>
annotatedType=su[email protected]677327b6
annotations=[]
type=class java.lang.Integer
क्यों प्रकार तर्क पर घोषित एनोटेशन की सरणी है आसपास के प्रकार घोंसला जब खाली है? मैं शीर्ष स्तर के प्रकार के लिए एक तत्व होने की उम्मीद करता हूं। मैं जेएलएस के आधार पर किसी स्पष्टीकरण की सराहना करता हूं।
लगातार जेडीके 8u101 (http://compilejava.net), पुराने जेडीके 8 और ग्रहण पर होता है।
धन्यवाद!
मुझे लगता है, हम इसे वापस [ 'AnnotatedTypeFactory' को ट्रेस कर सकते हैं , लाइन 105] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/sun/reflect/annotation/AnnotatedTypeFactory.java#105) जहां नेस्टेड पैरामीट्रिज्ड प्रकार हैं बिना शर्त रूप से (गैर-'स्टेटिक') आंतरिक कक्षाओं (पुन: प्रयोज्य प्रकारों के विपरीत, सात पंक्तियों के विपरीत) के रूप में माना जाता है। असल में, 'पैरामैटर्ट्रिज्ड टाइप' पूछना चाहे वह 'स्थैतिक' है, सीधे आगे नहीं है ... – Holger