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:
Java
Java
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();
}
}
}
Output:
Example 2: To print Annotation on array type or multidimensional array or Generic for Methods of class GFG.
Method Name: getAddress Type: java.lang.String Annotations: [@GFG$customAnnotatedType()]
// 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();
}
}
Output:
Reference: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedType.htmlMethod Name: getWords Type: java.util.ListAnnotations: 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