zoukankan      html  css  js  c++  java
  • Java中的反射

    Set/Get 属性值

    注意:不要使用 clazz.getField("name"),字段一般都是私有的,该方法受访问修饰符的限制。

    public static void main(String[] args) throws ClassNotFou... {

          

           Class clazz = Class.forName("Study.Student");

                 

           Object obj=clazz.newInstance();   //创建对象的实例

          

           setProperty("name","GoldenKey",clazz,obj);

           setProperty("age",13,clazz,obj);

          

           System.out.println(">>>" + getProperty("name",clazz,obj));

           System.out.println(">>>" + getProperty("age",clazz,obj));

        }

       

        public static void setProperty(String key,Object value,Class clazz,Object obj) throws ...{

           Field[] fs = clazz.getDeclaredFields();

           for(Field fd : fs ){

               if(fd.getName().equals(key)){

                  fd.setAccessible(true);

                  fd.set(obj, value);

               }

           }

        }

       

        public static Object getProperty(String key,Class clazz,Object obj) throws ...{

           Field[] fs = clazz.getDeclaredFields();

           for(Field fd : fs ){

               if(fd.getName().equals(key)){

                  fd.setAccessible(true);

                  return fd.get(obj);

               }

           }

           return null;

        }

    获取/调用 方法

    Class clazz = Class.forName("Study.Student");

     

           //获取并调用两个参数的构造器

           Constructor constructor = clazz.getConstructor(String.class,int.class);

           Object obj = constructor.newInstance("zhagnsan",30);

          

           //获取的是该类中的公有方法和父类中的公有方法。

           Method[] methods = clazz.getMethods();

          

           //想要获取私有方法。必须用getDeclearMethod();

           Method method1 = clazz.getDeclaredMethod("method", null);

          

           //获取特定方法

           Method method = clazz.getMethod("show", int.class,String.class);

          

           // private method可访问

           method1.setAccessible(true);

     

           //获取静态方法

           Method method3 = clazz.getMethod("function",null);

           method3.invoke(null,null);

          

           //执行一个方法

           method.invoke(obj, 39,"hehehe");

  • 相关阅读:
    C/C++ 语言中的表达式求值
    C++中delete与delete[]
    特殊数据类型成员变量的初始化
    C++中的new
    C++数组名解析
    C++中的位拷贝和值拷贝
    while(cin>>s)退出问题
    C++继承中的虚析构函数
    C++的IO标准库介绍
    C++一道面试题(atexit)
  • 原文地址:https://www.cnblogs.com/key1309/p/6603625.html
Copyright © 2011-2022 走看看