Java 反射 API——Parameter

原文:https://www.studytonight.com/java-8/java-reflection-api-parameter-class

在 Java 8 版本中,Java 增加了一个名为Parameter的新类来获取关于方法参数的信息。Parameter类帮助获取关于方法参数的信息,包括名称和修饰符等。它还提供了获取参数属性的替代方法。

我们可以这样理解它:假设我们在运行时有一个类,我们想知道它的方法、参数和Parameter类型等。在这种情况下,我们使用反射 API,它由各种类组成,如类、方法、构造器、参数等。关于反射 API 的更多信息,可以参考我们的帖子 Java 反射 API

用于反射 API 中,用于运行时处理参数。它存储在 java.lang.reflect 包中。下面是类的声明。

申报

public final class Parameter extends Object implements AnnotatedElement

Parameter类方法

下表包含Parameter类的方法,这些方法有助于在运行时访问参数。

|

方法

|

描述

| | 布尔等于(对象对象) | 它根据可执行文件和索引进行比较。 | | 注释类型 getAnnotatedType() | 它返回一个 AnnotatedType 对象,该对象表示使用类型来指定由该参数表示的形式参数的类型。 | | T getAnnotation(类注释类)</t> | 如果存在指定类型的注释,则返回该元素的注释,否则返回 null。 | | 注释[] getAnnotations() | 它返回出现在这个元素上的注释。 | | T[]GetannostatusBytype(类< T >注释类) | 它返回与此元素关联的注释。 | | 【古特 getdeclaredannotation】(类< T >注释类) | 如果指定类型的注释直接存在,则返回该元素的注释,否则返回 null。 | | annotation[]getDeclaredAnnotations() | 它返回直接出现在这个元素上的注释。 | | 【t[]get clariionsbytype】(类< T >注释类) | 如果指定类型的注释直接存在或间接存在,它将返回该元素的注释。 | | Executable getDevingExecutable() | 它返回声明该参数的可执行文件。 | | int get codes() | 它获取由该参数对象表示的参数的修饰符标志。 | | String getName() | 它返回参数的名称。 | | getparameterizedtype() | 它返回一个类型对象,该对象标识由该参数对象表示的参数的参数化类型。 | | 类> getType() | 它返回一个 Class 对象,该对象标识由该 parameter 对象表示的参数的声明类型。 | | int hashCode() | 它根据可执行文件的哈希代码和索引返回哈希代码。 | | 布尔 isImplicit() | 如果此参数在源代码中隐式声明,则返回 true 否则返回 false。 | | 布尔值 isNamePresent() | 如果参数根据类文件具有名称,则返回 true 否则返回 false。 | | boolean isSynthetic() | 如果此参数在源代码中既没有隐式也没有显式声明,则返回 true 否则返回 false。 | | 布尔 isVarArgs() | 如果此参数表示变量参数列表,则返回 true 否则返回 false。 |

举例时间:

让我们举一个例子来访问一个名为“计算”的类的参数,这个类包含两个带参数的方法。我们通过Parameter类的方法来获取参数。

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

class Calculate {  
    int add(int a, int b){  
        return (a+b);  
    }  
    int sub(int a, int b){  
        return (a-b);  
    }  
}

public class STDemo {
    public static void main(String[] args){

      Class<? extends Calculate> cal = new Calculate().getClass();
      // Get methods
      Method[] method = cal.getDeclaredMethods();
      System.out.println("Method Name: "+ method[0].getName());
      // get parameters
      System.out.println("Parameters: ");
      Parameter[] parameters = method[0].getParameters();
      System.out.println(parameters[0].getType()+" "+parameters[0].getName());
      System.out.println(parameters[1].getType()+" "+parameters[1].getName());

    }
}

方法名称:添加 参数: int a int b

示例:获取方法的所有参数

在这个例子中,我们得到了类的两个方法的所有参数。因为 getParameters()方法返回一个数组,所以我们需要使用 for 循环来访问所有的参数。

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

class Calculate {  
    int add(int a, int b){  
        return (a+b);  
    }  
    int sub(int a, int b){  
        return (a-b);  
    }  
}

public class STDemo {
    public static void main(String[] args){

      Class<? extends Calculate> cal = new Calculate().getClass();
      // Get methods
      Method[] methods = cal.getDeclaredMethods();
      for(Method method : methods) {
          System.out.println("Method Name: "+ method.getName());
          Parameter[] parameters = method.getParameters();
          System.out.println("Parameters: ");
          for(Parameter parameter : parameters)
              System.out.println(parameter);
      }     
    }
}

方法名称:添加 参数: int a int b 方法名称:子 参数: int a int b

注意:要获取参数的实际名称,使用-参数标志编译类。默认。类文件不存储参数,返回 argsN 作为参数名,其中 N 是方法中的参数个数。