Clase de método | método getGenericParameterTypes() en Java

El método java.lang.reflect .Method.getGenericParameterTypes() de la clase Method devuelve una array de objetos Type que representan los tipos de parámetros, declarados en method en el momento de la codificación. Significa que el método getGenericParameterTypes() devuelve una array de parámetros que pertenecen al objeto del método. Devuelve una array de longitud 0 si el objeto del método no toma parámetros.

Si un tipo de parámetro formal es un tipo parametrizado, el objeto Type devuelto debe reflejar con precisión los parámetros de tipo reales utilizados en el código fuente. por ejemplo, para el método public void getValue(T value){}, sustituya un parámetro de tipo T por un tipo parametrizado (es decir, List), luego el método devolverá «java.util.List» como tipo de parámetro.

Sintaxis:

public Type[] getGenericParameterTypes()

Valor devuelto: este método devuelve una array de tipos que representan los tipos de parámetros formales del objeto del método, en orden de declaración.

Excepción: este método arroja las siguientes excepciones:

  • GenericSignatureFormatError : si la firma del método genérico no es la misma que el formato especificado en la especificación JVM.
  • TypeNotPresentException : si los tipos de parámetros hacen referencia a una declaración de tipo inexistente.
  • MalformedParameterizedTypeException : si los tipos de parámetros subyacentes hacen referencia a un tipo parametrizado del que no se puede crear una instancia por ningún motivo.
    • Los siguientes programas ilustran el método getGenericParameterTypes() de la clase Method:

      Programa 1: Imprime todos los tipos de parámetros declarados para el método

      // Program Demonstrate how to apply getGenericParameterTypes() method
      // of Method Class.
        
      import java.lang.reflect.Method;
      import java.lang.reflect.Type;
        
      public class GFG {
        
          // Main method
          public static void main(String[] args)
          {
              try {
                  // create class object
                  Class classobj = demoClass.class;
        
                  // get Method Object
                  Method[] methods = classobj.getMethods();
        
                  // iterate through methods
                  for (Method method : methods) {
        
                      // only taking method defined in the demo class
                      if (method.getName().equals("setValue")
                          || method.getName().equals("getValue")
                          || method.getName().equals("setManyValues")) {
        
                          // apply getGenericParameterTypes() method
                          Type[] parameters = method.getGenericParameterTypes();
        
                          // print parameter Types of method Object
                          System.out.println("\nMethod Name : "
                                             + method.getName());
                          System.out.println("No of Parameters : "
                                             + parameters.length);
                          System.out.println("Parameter object details:");
                          for (Type type : parameters) {
        
                              System.out.println(type.getTypeName());
                          }
                      }
                  }
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      // a simple class
      class demoClass {
        
          // method containing two parameter
          public void setValue(String value1, String value2)
          {
              System.out.println("setValue");
          }
        
          // method containing no parameter
          public String getValue()
          {
              System.out.println("getValue");
              return "getValue";
          }
        
          // method containg many parameter
          public void setManyValues(int value1,
                                    double value2,
                                    String value3)
          {
              System.out.println("setManyValues");
          }
      }
      Producción:

      Method Name : setManyValues
      No of Parameters : 3
      Parameter object details:
      int
      double
      java.lang.String
      
      Method Name : getValue
      No of Parameters : 0
      Parameter object details:
      
      Method Name : setValue
      No of Parameters : 2
      Parameter object details:
      java.lang.String
      java.lang.String
      

      Programa 2: Comprobar si el objeto Método contiene parámetro o no

      // Program Demonstrate how to apply getGenericParameterTypes()
      // method of Method Class.
      import java.lang.reflect.Method;
      import java.lang.reflect.Type;
        
      public class GFG {
        
          // Main method
          public static void main(String[] args)
          {
              try {
                  // create class object
                  Class classobj = sample.class;
        
                  Method[] methods = classobj.getMethods();
        
                  /*check whether setManyValues() method contains 
                               int parameter or not
                      and print no of string parameter it contains*/
        
                  for (Method method : methods) {
                      if (method.getName().equals("setValue")) {
        
                          int count = containsParameter(
                              method,
                              (Type)java.lang.String.class);
                          System.out.println("No of String"
                                             + " Parameters in setValue(): "
                                             + count);
                      }
                  }
        
                  // check whether setManyValues() method
                  // contains int parameter or not
                  // and print no of string parameter it contains
        
                  for (Method method : methods) {
        
                      if (method.getName().equals("setManyValues")) {
        
                          int count = containsParameter(method,
                                                        (Type) int.class);
        
                          System.out.println("No of int Parameters"
                                             + " in setManyValues(): "
                                             + count);
                      }
                  }
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
          }
        
          // count no of parameters contain by
          // method same as passed to method
          private static int
          containsParameter(Method method,
                            Type parameterName)
          {
              int count = 0;
        
              // get all parameter types list
              // using getGenericParameterTypes()
              Type parameters[] = method.getGenericParameterTypes();
        
              for (int i = 0; i < parameters.length; i++) {
                  // check contains parameter or not
                  if (parameters[i] == parameterName) {
                      count++;
                  }
              }
        
              return count;
          }
      }
      // a simple class
      class sample {
        
          // method containing two parameter
          public void setValue(String value1,
                               String value2)
          {
              System.out.println("setValue");
          }
        
          // method containing many parameter
          public void setManyValues(int value1,
                                    double value2,
                                    String value3)
          {
              System.out.println("setManyValues");
          }
      }
      Producción:

      No of String Parameters in setValue(): 2
      No of int Parameters in setManyValues(): 1
      

      Referencia: https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#getGenericParameterTypes–

Publicación traducida automáticamente

Artículo escrito por AmanSingh2210 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *