The java.lang.reflect.Method.getAnnotatedReturnType() method returns an AnnotatedType object which represents AnnotatedType to specify return type of Method Object. If Method object is created for a constructor, then AnnotatedType object specifies the type of the constructed object. If Method object is created for a method, the AnnotatedType object specifies the use of a type to specify the return type of the method specified in the source code.
The returned AnnotatedType represents implementation of AnnotatedType itself or any of its sub-interfaces like AnnotatedArrayType, AnnotatedParameterizedType, AnnotatedTypeVariable, AnnotatedWildcardType. AnnotatedType represents the potentially annotated use of any type including an array type, a parameterized type, a type variable, or a wildcard type currently running in Java Virtual Machine.
Syntax:
public AnnotatedType getAnnotatedReturnType()
Return Value: This method returns an AnnotatedType object which represents AnnotatedType to specify return type of Method Object.
Below programs illustrates getAnnotatedReturnType() method of Method class:
Example 1:Use AnnotatedType() for a specific method given as Input.
The program contains a Method name getAddressMethod which contains AnnotatedType. So this program is going to get details of AnnotatedType, contained by getAddressMethod Method.
// Java program to demonstrate how to // apply getAnnotatedReturnType() method // of Method Class. import java.lang.annotation.*; import java.lang.reflect.AnnotatedType; import java.lang.reflect.Method; import java.util.Arrays; public class GFG { // Creating custom AnnotatedType @Target ({ ElementType.TYPE_USE }) @Retention (RetentionPolicy.RUNTIME) private @interface customAnnotatedType { } // a sample method with return type String and // AnnotatedType is @customAnnotatedType public @customAnnotatedType String getAddress() { return null ; } // main method public static void main(String[] args) { try { // create class object Class classobj = GFG. class ; // create method object of getAddress Method getAddressMethod = null ; Method[] methods = classobj.getMethods(); for (Method m : methods) { if (m.getName().equals( "getAddress" )) getAddressMethod = m; } // get AnnotatedType for return type AnnotatedType annotatedType = getAddressMethod .getAnnotatedReturnType(); // print AnnotatedType details with Method name System.out.println( "Method Name: " + getAddressMethod.getName()); System.out.println( "Type: " + annotatedType.getType().getTypeName()); System.out.println( "Annotations: " + Arrays.toString(annotatedType.getAnnotations())); } catch (Exception e) { e.printStackTrace(); } } } |
Method Name: getAddress Type: java.lang.String Annotations: [@GFG$customAnnotatedType()]
Example 2: To print Annotation on array type or multidimensional array or Generic for Methods of class GFG.
// Java program to demonstrate how to // apply getAnnotatedReturnType() method // of Method Class. import java.lang.annotation.*; import java.lang.reflect.*; import java.util.List; public class systemUTCMethodDemo<T> { // Creating custom AnnotatedType @Target ({ ElementType.TYPE_USE }) @Retention (RetentionPolicy.RUNTIME) private @interface customAnnotatedType { } // a sample method with Annotation on array type public @customAnnotatedType String[] getAddress() { return null ; } // a sample method on Annotation on multidimensional array public String[] @customAnnotatedType [] getvalues() { return null ; } // a sample method on Annotation on a type with generic public @customAnnotatedType List<T> getWords() { return null ; } // main method public static void main(String[] args) { try { // create class object Class classobj = systemUTCMethodDemo. class ; // create method object of getAddress and getValues Method[] methods = classobj.getMethods(); for (Method m : methods) { // if method object is for getAddress and getValues // then print @customAnnotatedType for both if (m.getName().equals( "getAddress" ) || m.getName().equals( "getvalues" ) || m.getName().equals( "getWords" )) { printDetails(m); } } } catch (Exception e) { e.printStackTrace(); } } public static void printDetails(Method m) { // get AnnotatedType for return type AnnotatedType annotatedType = m.getAnnotatedReturnType(); // print AnnotatedType details with Method name System.out.println( "Method Name: " + m.getName()); System.out.println( "Type: " + annotatedType.getType().getTypeName()); System.out.println( "Annotations: " + annotatedType); System.out.println(); } } |
Method Name: getWords Type: java.util.List Annotations: sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedParameterizedTypeImpl@12a3a380 Method Name: getvalues Type: java.lang.String[][] Annotations: sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedArrayTypeImpl@29453f44 Method Name: getAddress Type: java.lang.String[] Annotations: sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedArrayTypeImpl@5cad8086
Reference: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedType.html