2021-04-18 11:22  阅读(86)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-java-lang-class.html

Java反射 - Java构造函数反射

以下四种方法来自Class类获取有关构造函数的信息:

    Constructor[] getConstructors()
    Constructor[]  getDeclaredConstructors()
    Constructor<T> getConstructor(Class...  parameterTypes)
    Constructor<T> getDeclaredConstructor(Class...  parameterTypes)
    

getConstructors()方法返回当前和超类的所有公共构造函数。

getDeclaredConstructors()方法返回当前类的所有声明的构造函数。

getConstructor(Class ... parameterTypes)和getDeclaredConstructor(Class ... parameterTypes)通过参数类型获取构造函数对象。

例子

以下代码显示了如何对构造函数执行反射。

    import java.lang.reflect.Constructor;
    import java.lang.reflect.Executable;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    import java.lang.reflect.Parameter;
    import java.util.ArrayList;
    
    class MyClass<T> {
    
      public MyClass(int i, int j, String s) {
    
      }
    
      public MyClass(T t) {
    
      }
    
      public int getInt(String a) {
        return 0;
      }
    }
    
    public class Main {
      public static void main(String[] args) {
        Class<MyClass> c = MyClass.class;
    
        System.out.println("Constructors for " + c.getName());
        Constructor[] constructors = c.getConstructors();
        ArrayList<String> constructDescList = getConstructorsDesciption(constructors);
        for (String desc : constructDescList) {
          System.out.println(desc);
        }
      }
    
      public static ArrayList<String> getConstructorsDesciption(
          Constructor[] constructors) {
        ArrayList<String> constructorList = new ArrayList<>();
        for (Constructor constructor : constructors) {
          String modifiers = getModifiers(constructor);
    
          String constructorName = constructor.getName();
    
          constructorList.add(modifiers + "  " + constructorName + "("
              + getParameters(constructor) + ") " + getExceptionList(constructor));
        }
        return constructorList;
      }
      public static ArrayList<String> getParameters(Executable exec) {
        Parameter[] parms = exec.getParameters();
        ArrayList<String> parmList = new ArrayList<>();
        for (int i = 0; i < parms.length; i++) {
    
          int mod = parms[i].getModifiers() & Modifier.parameterModifiers();
          String modifiers = Modifier.toString(mod);
          String parmType = parms[i].getType().getSimpleName();
          String parmName = parms[i].getName();
          String temp = modifiers + "  " + parmType + "  " + parmName;
          if (temp.trim().length() == 0) {
            continue;
          }
          parmList.add(temp.trim());
        }
        return parmList;
      }
    
      public static ArrayList<String> getExceptionList(Executable exec) {
        ArrayList<String> exceptionList = new ArrayList<>();
        for (Class<?> c : exec.getExceptionTypes()) {
          exceptionList.add(c.getSimpleName());
        }
        return exceptionList;
      }
    
      public static String getModifiers(Executable exec) {
        int mod = exec.getModifiers();
        if (exec instanceof Method) {
          mod = mod & Modifier.methodModifiers();
        } else if (exec instanceof Constructor) {
          mod = mod & Modifier.constructorModifiers();
        }
        return Modifier.toString(mod);
      }
    }
    

上面的代码生成以下结果。

2021041811211_1.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 构造函数反射
上一篇
Java 方法反射
下一篇
Java 反射对象创建