zoukankan      html  css  js  c++  java
  • java反射机制,通过类名获取对象,通过方法名和参数调

    try {
    //得到对象
    Class c = Class.forName("完整类名");
    Object yourObj = c.newInstance();
    //得到方法
    Method methlist[] = cls.getDeclaredMethods();
    for (int i = 0; i < methlist.length; i++) {
    Method m = methlist[i];
    }
    //获取到方法对象,假设方法的参数是一个int,method名为setAge
    Method sAge = c.getMethod("setAge", new Class[] {int.class});
    //获得参数Object
    Object[] arguments = new Object[] { new Integer(37)};
    //执行方法
    sAge.invoke(yourObj , arguments);
    } catch (Exception e) {
    }  

    下面以一个具体的实例来说明。此实例来自《精通Hibernate 3.0 Java数据库持久层开发实践》一书。

    先在com.hqh.reflect下建一个文件UseInfojava

    package com.hqh.reflect;

    public class UseInfo {

    private Integer id;
    private String userName;
    private String password;

    public Integer getId() {
       return id;
    }

    public void setId(Integer id) {
       this.id = id;
    }

    public String getUserName() {
       return userName;
    }

    public void setUserName(String userName) {
       this.userName = userName;
    }

    public String getPassword() {
       return password;
    }

    public void setPassword(String password) {
       this.password = password;
    }

    }

    package com.hqh.reflect;

    public class GetClassTest {

    public static void main(String[] args) {
       GetClassTest test = new GetClassTest();
       if(test.ClassCheck())
        System.out.println("OK");

    }

    public boolean ClassCheck() {
       try {
        System.out.println("通过类本身获得对象");
        Class userClass = this.getClass();
        System.out.println(userClass.getName());
        System.out.println("===========");
       
        System.out.println("通过子类的实例获得父类对象");
        UseInfo useInfo = new UseInfo();
        userClass = useInfo.getClass();
        System.out.println(userClass.getName());
        Class subUserClass = userClass.getSuperclass();
        System.out.println(subUserClass.getName());
        System.out.println("===========");
       
        System.out.println("通过类名.class获取对象");
        Class forClass = com.hqh.reflect.UseInfo.class;
        System.out.println(forClass.getName());
        System.out.println("===========");
       
        System.out.println("通过类名的字符串获取对象");
        Class forName = Class.forName("com.hqh.reflect.UseInfo");
        System.out.println(forName.getName());
        System.out.println("=============");
       
       } catch (Exception e) {
        e.printStackTrace();
        return false;
       }
       return true;
    }
    }


    结果:

    通过类本身获得对象
    com.hqh.reflect.GetClassTest
    ===========
    通过子类的实例获得父类对象
    com.hqh.reflect.UseInfo
    java.lang.Object
    ===========
    通过类名.class获取对象
    com.hqh.reflect.UseInfo
    ===========
    通过类名的字符串获取对象
    com.hqh.reflect.UseInfo
    =============
    OK

  • 相关阅读:
    (二)使用log4net写入数据库自定义日志
    (一)使用log4net生成日志文件
    微信公众号测试号内网配置以及微信网页授权
    ios浏览器调试踩坑(1)----mescroll.js和vue-scroller
    three 3D实例学习
    golang解析git log时间
    Shell 简易教程
    golang 并发程序写入map两种实现方式sync.Mutex和chan的效率对比
    golang字符串string与字符数组[]byte高效转换
    mysql begin rollback commit 事务互斥验证
  • 原文地址:https://www.cnblogs.com/azhqiang/p/3886963.html
Copyright © 2011-2022 走看看