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)
上一篇 2022年5月1日 下午8:20
下一篇 2022年5月1日 下午8:20


相关推荐

  • Python学习【第五篇】循环语句「建议收藏」

    Python学习【第五篇】循环语句「建议收藏」Python循环语句接下来将介绍Python的循环语句,程序在一般情况下是按顺序执行的。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们执行一个语句或语句组多次。Python

    2022年7月5日
    18
  • 一文搞定BP神经网络——从原理到应用(原理篇)「建议收藏」

    一文搞定BP神经网络——从原理到应用(原理篇)「建议收藏」神经网络结构以及前向传播过程损失函数和代价函数反向传播1矩阵补充知识11矩阵求梯度12海塞矩阵13总结2矩阵乘积和对应元素相乘3反向传播原理四个基础等式4反向传播总结41单样本输入公式表42多样本输入公式表本文小结Hello,对于神经网络的原理,我入门了好多次,每次都觉得懂了,但是其实内部原理并没有理解透彻。经过不懈努力,终于茅塞顿开,遂总结此文。本

    2022年7月20日
    16
  • 第一部分:欢迎来到 n8n → 入门指南:n8n 的用户界面 → 工作流编辑器 → 配置面板

    第一部分:欢迎来到 n8n → 入门指南:n8n 的用户界面 → 工作流编辑器 → 配置面板

    2026年3月15日
    2
  • NDT配准原理_icp配准算法

    NDT配准原理_icp配准算法文章目录NDT预备知识正态分布高斯牛顿法求解非线性最小二乘NDT原理(1)目标函数(2)简化目标函数(3)数值求解(4)算法流程:(5)相比ICP的优势NDT源码解析与其在PCL应用参考资料NDT预备知识正态分布n维正态随机过程中,其概率密度函数为:p(x⃗)=1(2π)D/2∣Σ∣exp⁡(−(x⃗−μ⃗)TΣ−1(x⃗−μ⃗)2)(1)p(\vec{x})=\frac{1}{(2\pi)^{D/2}\sqrt{|\boldsymbol{\Sigma}|}}\exp\left(-\f

    2025年7月13日
    5
  • 分布式互斥

    分布式互斥分布式互斥前言什么是分布式互斥 如何才能让分布式系统里的程序互斥地访问临界资源霸道总裁 集中式算法民主协商 分布式算法轮值 CEO 令牌环算法知识扩展 有适合大规模系统中的分布式互斥算法吗 总结前言如何让分布在不同计算机上的程序具有 团队精神 如何让程序通过协作共同去达成一个业务目标 什么是分布式互斥 你正在一家餐厅使用自助咖啡机泡制咖啡 突然有个人过来挪走了你的杯子 开始泡制他自己的咖啡 你耐着性子等他操作完 继续泡制自己的咖啡 结果你开始没多久 他又回来中断了你泡制咖啡的过程 相信要不了几

    2026年3月19日
    1
  • js中moment方法_jquery 虚拟dom

    js中moment方法_jquery 虚拟domvue项目中,需要把moment.js挂载到全局上(即vue的原型链上),访问时直接使用this.moment();vue项目中不挂载到全局,单文件(单组件)使用:==>>importmomentfrom”moment”;然后直接使用moment()1.初始化日期/时间初始化日期:moment().for…

    2025年9月18日
    6

发表回复

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

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