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

java invoke 方法说明_java中的反射,invoke方法invoke,就是通过函数名反射调用相应的函数。以下代码简单地介绍了java反射中invoke方法packageorg.curry.tool;importjava.lang.reflect.Method;publicclassInvokeMethods{publicstaticvoidmain(String[]args){Employeeemp=newEmployee(…

大家好,又见面了,我是你们的朋友全栈君。

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;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133542.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LNK2001: 无法解析的外部符号的几种情况

    LNK2001: 无法解析的外部符号的几种情况errorLNK2001:无法解析的外部符号无法解析几种情况:1>MSVCRT.lib(MSVCR90.dll):errorLNK2005:_printf已经在libcurl.lib(pqueue.obj)中定义1>MSVCRT.lib(MSVCR90.dll):errorLNK2005:_fprintf已经在libcurl.lib(pem_lib.o…

    2022年6月28日
  • 说说 jBPM 工作流引擎的设计原理

    说说 jBPM 工作流引擎的设计原理1服务API设计jBPM4工作流引擎的核心PVM主要依靠4组服务API:流程定义服务-ProcessService。流程执行服务-ExecutionService。流程管理服务-ManagermentService。指令服务-CommandService。应用通过这些服务与PVM进行数据交互,这些都是在支持事务的持久化模式下运…

    2022年9月8日
  • 操作系统中进程调度算法详解及例题解释「建议收藏」

    操作系统中进程调度算法详解及例题解释「建议收藏」文章目录1.先来先服务(FCFS,firstcomefirstserve)1.1算法思想1.2算法规则1.3用于作业/进程调度1.4是否可抢占1.5优缺点1.6是否会导致饥饿2.短作业优先(SJF,shortestjobfirst)2.1算法思想2.2算法规则2.3用于作业/进程调度2.4是否可抢占2.5优缺点2.6是否会导致饥饿3.高响应比优先(HRRN)…

    2022年9月29日
  • 模型剪枝学习笔记 — EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning

    模型剪枝学习笔记 — EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning论文:https://arxiv.org/abs/2007.02491代码:https://github.com/anonymous47823493/EagleEye这篇论文一定要好好研究下,提出该剪枝方法的是暗物智能科技&中山大学,当初去面试过该公司,聊了将近一小时,大部分是关于剪枝的内容。。。。。。。可惜自己真实菜如狗。。。。。…

    2022年8月16日
  • 关于jmeter客户端实现中HttpClient4与Java的区别

    关于jmeter客户端实现中HttpClient4与Java的区别如上图:jmeter客户端实现方式有三种,一种是java,一种是httpclient4,还有一种默认,我们来看一下java与httpclient4的区别:Java:选择压测时,链接是复用的(代码中的http调用都加了连接池)httpclient4:压测时,每请求一次都创建一个新的链接,(jmeter5.0以前默认关闭了连接复用,5.0上是打开的:即每请求一次都会创建一个新的链接)从JMeter5.0开始,当使用默认的HC4实现时,JMeter将在每个线程组迭代时重置HTTP状态(SS…

    2022年7月22日
  • 爬虫案例分析_爬虫爬取司法案例

    爬虫案例分析_爬虫爬取司法案例小番在这里这里涉及了一些反爬手段与方法,老铁们赶紧拿起小板凳开始听了哦爬取思路:打开一个番剧,找到播放页面,开始F12检查元素发现直接跳回首页了,这就没法用浏览器自带的抓包了。可以使用抓包工具fiddle进行抓包。先不急着抓包,先看看播放页的源代码view-source:www.zzzfun.com/vod_play_id_2029_sid_1_nid_1.html可以得到每一话的链接,那么还少了视频链接,网页源代码里面没有,只能抓包了。可以发现debug调试时跳转的代码,在右下角窗口

    2022年8月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号