注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 IB客座主编(四)美国西蒙公..
 帮助

通过Java反射调用方法


2008-01-28 19:11:40
 标签:Java 开发 反射   [推送到技术圈]

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/61002
通过Java反射调用方法
 
这是个测试用的例子,通过反射调用对象的方法。
 
 
TestRef.java
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

/**
* Created by IntelliJ IDEA.
* File: TestRef.java
* User: leizhimin
* Date: 2008-1-28 14:48:44
*/

public class TestRef {

    public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        Foo foo = new Foo("这个一个Foo对象!");
        Class clazz = foo.getClass();
        Method m1 = clazz.getDeclaredMethod("outInfo");
        Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
        Method m3 = clazz.getDeclaredMethod("getMsg");
        m1.invoke(foo);
        m2.invoke(foo, "重新设置msg信息!");
        String msg = (String) m3.invoke(foo);
        System.out.println(msg);
    }
}

class Foo {
    private String msg;

    public Foo(String msg) {
        this.msg = msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getMsg() {
        return msg;
    }

    public void outInfo() {
        System.out.println("这是测试Java反射的测试类");
    }
}
 
控制台输出结果:
这是测试Java反射的测试类
重新设置msg信息!

Process finished with exit code 0
 
 
 

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/61002





    文章评论
 
2008-01-29 09:40:31
反射调用 没接触过 学习了

2008-01-29 12:15:10
very good!

2008-07-13 14:49:14
Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
如果你不知道方法的参数类型怎么办?

2008-08-11 16:41:37
如果通过JAVA的动态代理去生成一个代理,再在这个动态代理里去得到方法,但是这里有两个方法:
public void test(Integer intObj);
public void test(int i);
当我调用testproxy.test(int i)时如何能够智能的得到我想要的方法,而不是得到testproxy.test(Integer intObj)

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: