java invoke 方法说明_java中的反射,invoke方法

invoke,就是通过函数名反射调用相应的函数。以下代码简单地介绍了java反射中invoke方法

package org.curry.tool;

import java.lang.reflect.Method;

public class InvokeMethods {

public static void main(String[] args) {

Employee emp = new Employee();

Class cl = emp.getClass();//是Class,而不是class

// getClass获得emp对象所属的类型的对象,Class就是描述类的类

// Class是专门用来描述类的类,比如描述某个类有那些字段,方法,构造器等等!

try {

// getMethod方法第一个参数指定一个需要调用的方法名称,这里是Employee类的setAge方法,

// 第二个参数是需要调用方法的参数类型列表,是参数类型!如无参数可以指定null或者省略

// 该方法返回一个方法对象

//参数必须和方法中一样,int和Integer,double和Double被视为不同的类型

Method sAge = cl.getMethod("setAge", new Class[] { int.class });

Method gAge = cl.getMethod("getAge", null);

Method pName = cl.getMethod("printName", new Class[] { String.class });

Object[] args1 = { new Integer(25) };

// invoke方法中,第二个参数为参数列表,该参数列表是一个object[]数组

// emp为隐式参数该方法不是静态方法必须指定

sAge.invoke(emp, args1);//通过setter方法赋值

Integer AGE = (Integer) gAge.invoke(emp, null);//通过getter方法返回值

int age = AGE.intValue();//Integer转换成int

System.out.println("The Employee Age is: " + age);

Object[] args3 = { new String("Jack") };

pName.invoke(emp, args3);

} catch (Exception e) {

e.printStackTrace();

}

System.exit(0);

}

}

class Employee {

// 定义一个员工类

public Employee() {

age = 0;

name = null;

}

// 将要被调用的方法

public void setAge(int a) {

age = a;

}

// 将要被调用的方法

public int getAge() {

return age;

}

// 将要被调用的方法

public void printName(String n) {

name = n;

System.out.println("The Employee Name is: " + name);

}

private int age;

private String name;

}

项目代码:

/**

*利用keyName来对以search作为查询条件的结果集进行过滤

/

public Map getMap(Search search,String keyName){

List entities=this.getBaseDao().search(search, DaoParam.SEARCH_OPTION_NORMAL);

Map map=new LinkedHashMap();

//通过参数keyName获得get方法名,比如getName,getAge

String methodName="get"+keyName.substring(0,1).toUpperCase()+keyName.substring(1);

for(T entity:entities){

Object key=null;

try {

//getter方法不需要参数

Method method=entity.getClass().getMethod(methodName);

//反射调用方法

key=method.invoke(entity);

if(key instanceof BasePojo){

//如果getter方法返回的是BasePojo类,那么以该BasePojo的id作为key

key=((BasePojo>)key).getId();

}

map.put(key, entity);

} catch (Exception e) {

logger.error(e,e);

}

}

entities=null;

return map;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值