Method Class | getAnnotatedReturnType() method in Java

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.

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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();
        }
    }
}

chevron_right


Output:

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.

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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();
    }
}

chevron_right


Output:

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



My Personal Notes arrow_drop_up

I am a Developer I love to code and bring my ideas alive

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.