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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android中定时器的使用

    Android中定时器的使用1.创建Timer对象,定时器本体。TimermTimer=newTimer();2.创建TimerTask对象,定义业务逻辑,TimerTask为接口,需要实现类,本文使用匿名内部类实现

    2022年7月1日
    22
  • vue动态生成表单_vue element 表单验证

    vue动态生成表单_vue element 表单验证前几天接了一个需求,需要动态生成一个表单数据,然后提交,提交完数据后。通过编辑按钮进入时,需要进行数据回填。没生成表单前的状态单机生成表单生成表单根据选择方式展示不同的表单元素如果从编辑页进入该页面有数据的话,进行数据回填样式同第三点相似,这里不再说明思路:请输入标题,请选择类型为父组件;请选择方式为子组件;根据请选择方式出来的内容为孙子组件难…

    2025年6月11日
    0
  • django权限管理例子_如何获得自定义房间权限

    django权限管理例子_如何获得自定义房间权限前言上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问权限源码分析源码入口:APIView.py文件下的initial方法下的check_per

    2022年7月30日
    3
  • HashMap底层数据结构原理解析[通俗易懂]

    HashMap底层数据结构原理解析[通俗易懂]老师:JDK中我们最常用的一个数据类是HashMap。那么,谁可以回答一下HashMap的底层数据结构原理是什么呢?小明:老师,我知道。众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。…

    2022年5月19日
    37
  • 买的源码可以申请软件著作权么_一套源码可以多次申请著作权吗

    买的源码可以申请软件著作权么_一套源码可以多次申请著作权吗Coca-colastandardizationoffice【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】Coca-colastandardizationoffice【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】计算机软件著作权登记源代码packageclassBreastextendsBroadcastReceiver{pri…

    2022年9月16日
    1
  • pycharm 风格_python主题更改

    pycharm 风格_python主题更改pycharm版本:2020.1.2Professional主题插件:MaterialThemeUI、AtomMaterialIcons效果插件下载方法IDE在Preference中找到Plugins一项,在插件商场中输入插件名并安装一开始用这种方法但是下载一半就fail了,所以转到官网下载官网下载MaterialThemeUIgithub地址MaterialThemeUI插件官网地址在插件官网中选择pycharmprofessional和相应的版本这里.

    2022年8月28日
    0

发表回复

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

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