-
2021-03-13 07:11:23
//测试方法
@Test
public void test01() {
Class p = null;
Person01 person01 = new Person01();
try {
p = Class.forName("pojo.Person01");
// 第一个参数是类的方法名 第二个是需要传的参数
Method method = p.getMethod("returnName", String.class);
String aa = (String) method.invoke(person01, "123");
Method method2 = p.getMethod("returnId", Integer.class);
String bb = (String) method2.invoke(person01, 123);
// 多个参数
Class [] argTypes = new Class[2];
argTypes[0]= String.class;
argTypes[1] = Integer.class;
Method methods = p.getDeclaredMethod("getDouble",Integer.class,String.class);
Object [] objects = new Object[2];
objects[0] = "test";
objects[1] = 123;
String cc = (String) methods.invoke(person01,123,"123");
System.out.println(aa);
System.out.println(bb);
System.out.println(cc);
} catch (Exception e) {
e.printStackTrace();
}
}
更多相关内容 -
JAVA反射参数传递概略
2019-05-25 02:31:39NULL 博文链接:https://xwood.iteye.com/blog/472428 -
java通过反射调用类中方法并传参
2019-07-05 18:38:05/** * @author: tianyong * @time: 2019/6/18 18:51 * @description:反射调用方法,获取return值 */ public static String reflectInvokeMethod(Class<?> clazz,String mn,Map params){ .../** * @author: tianyong * @time: 2019/6/18 18:51 * @description:反射调用方法,获取return值 */ public static String reflectInvokeMethod(Class<?> clazz,String mn,Map params){ String res = ""; try { Method method = clazz.getMethod(mn,Map.class); method.setAccessible(true); res = method.invoke(clazz.newInstance(),params).toString(); } catch (Exception e) { e.printStackTrace(); } return res; }
调用: String res= reflectInvokeMethod(ChartHandle.class, method,params);
返回的res,即为调用方法的返回值
如果本文帮到您了,欢迎关注公众号
-
反射方法的调用与传参
2020-04-16 13:35:23方法的调用 创建一个实例,获取方法,调用方法。 package my; import java.lang.reflect.Type; import af.test.Example; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test...方法的调用
创建一个实例,获取方法,调用方法。
package my; import java.lang.reflect.Type; import af.test.Example; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test2 { public static void main(String[] args) throws Exception { //从example.jar中加载一个类,也可以自己传一个类去尝试,里面随便加个void类型的打印一句话就行了 // void test1() Class cls = Class.forName("af.test.Example"); //创建实例 Object obj = cls.newInstance(); //tes1没有参数 Method testMethod = cls.getDeclaredMethod("test1"); //调用这个方法,里面有一句打印 testMethod.invoke(obj); System.out.println("Exit......"); } }
方法的传参
package my; import java.lang.reflect.Type; import af.test.Example; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test2 { public static void main(String[] args) throws Exception { //从example.jar中加载一个类 Class cls = Class.forName("af.test.Example"); Object obj = cls.newInstance(); //tes2传2个Integer void test(int a, int b) Class[] in = { Integer.class, Integer.class}; Method testMethod = cls.getDeclaredMethod("test2", in); //Method method = cls.getDeclaredMethod("test2", Integer.class, Integer.class); Object[] value = {30, 31}; testMethod.invoke(obj, value); System.out.println("Exit......"); } }
方法的返回值
先创建一个实例(newInstance),然后获取这个实例的某个方法(Method),最后调用这个方法(invoke)
package my; import java.lang.reflect.Type; import af.test.Example; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Test2 { public static void main(String[] args) throws Exception { //从example.jar中加载一个类 Class cls = Class.forName("af.test.Example"); //创建 一个实例 Object obj = cls.newInstance(); //test2有两个参数 void test2(double a, double b) Class[] argTypes = {double.class, double.class}; Method testMethod = cls.getDeclaredMethod("test5", argTypes); //调用这个实例的方法 Object[] argValues = {4.3 , 2}; // 会自动包装为两个double对象 //在调用obj的testMethod的时候,传入参数 argValues Object result = testMethod.invoke(obj, argValues); //第一种方式:判断一个对象result if(result instanceof Double) { double ret = (double) result; System.out.println("结果为: " + ret); } //第二种方式:判断一个对象result 是否为某个类(或子类)的实例 if(Double.class.isInstance(result)) { double ret = (double) result; System.out.println("结果为: " + ret); } //第三种方式:比较一个类ccc和另一个是否相同(或是其子类) Class ccc = result.getClass(); if(ccc.isAssignableFrom(Double.class)) { double ret = (double) result; System.out.println("结果为: " + ret); } //第四种方式:比较一个类ccc和另一个类是否相同 if(cls.equals(Double.class)) { double ret = (double) result; System.out.println("结果为: " + ret); } System.out.println("Exit."); } }
-
通过Java反射机制调用方法
2021-03-08 05:51:42通过Java反射机制调用方法//20210204写在前面:最近再把Java反射和注释知识点过一遍,在这里记一下重要的点,本文讲述反射机制创建对象并调用方法主要任务:使用类反射机制实现对象创建以及方法调用与普通方式实现...通过Java反射机制调用方法
//20210204
写在前面:最近再把Java反射和注释知识点过一遍,在这里记一下重要的点,本文讲述反射机制创建对象并调用方法
主要任务:
使用类反射机制实现对象创建以及方法调用
与普通方式实现对象创建以及方法调用,并对比二者区别
程序源代码:
//此处实现String的反射调用,测试方法为equals方法
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MethodReflection {
public static void main(String[] args) throws Exception{
String test = new String("hello world");
System.out.println(test.equals("hello world"));
Class st = Class.forName("java.lang.String");
Constructor con = st.getDeclaredConstructor(String.class);//获取有参构造
Object obj = con.newInstance("hello world");
Method[] methods = st.getMethods();
// for (Method method : methods) {
// System.out.println(method.getName()+" "+ Modifier.toString(method.getModifiers()));
// }
System.out.println(methods[0].getName());
Object value = methods[0].invoke(obj,"hello world");
System.out.println(value.toString());
}
}
输出如下:
对比:
使用普通方法
优点:方便
缺点:不灵活,一旦需求改了就需要改源代码
使用反射机制
优点:灵活,可以把关键内容写进配置文件,java文件只是构造一个模板,需求要改的时候更改配置文件即可
缺点:不方便,程序冗长
附录:
小知识点——关于可变长度参数[...]:
Java中,一个方法可以传入不定长度的参数,使用参数类型+‘...’指定即可
例:
//'...'的使用举例
public static void test(String... args){
for(Stirng str : args){
System.out.println(str);//输出传入参数列表
}
}
public static void main(String[] args){
test("hello","world");
}
输出如下:
以上
希望对大家有所帮助
通过Java反射机制调用方法 相关文章
JavaSE_基本语法学习
JavaSE_基本语法学习 1.注释 注释有三种: 1. 单行注释//2. 多行注释/**/3. 文档注释 /** */ 2.标识符与关键字 java所有的组成部分都需要名字. 标识符:类名,变量名以及方法名都被称为标识符 关键字:除类名,变量名以及方法名外,其他基本为关键字 //abstract定
腾讯安全月报丨0误报通过赛可达认证、DDoS威胁报告发布、CASB方案上线……
腾讯智慧城市安全运营中心获IDC推荐,助力城市安全生态加快融通 1月,《IDC特殊研究:中国智慧城市安全运营中心市场洞察》发布,综合呈现了相关建设现状、实践成果、未来趋势及进阶建议。腾讯智慧城市安全运营中心凭借产品技术实力、方案创新能力及业界最佳实
Hutool Java 工具类库导出 Excel,超级简单!
首先在POM.xml中加入GAV dependency groupIdcn.hutool/groupId artifactIdhutool-all/artifactId version5.0.7/version/dependencydependency groupIdorg.apache.poi/groupId artifactIdpoi-ooxml/artifactId version4.1.1/version/dependencydependency gro
JavaScript 代码技巧mark
分享一些我常用的代码优化技巧,希望对你有帮助。 1. 多表达式多 if 判断 我们可以在数组中存储多个值,并且可以使用数组include方法。 1 // 长2 if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') { //logic}3 // 短4 if (['abc', 'def', 'ghi
【JAVA】之获取CSV文件数据以及获取Excel文件数据
一、获取CSV文件数据 import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.testng.SkipException;import org.t
java-response-乱码解决
(1)响应体设置文本 PrintWriter getWriter () 获得字符流,通过字符流的 write ( String s) 方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览 器端。 关于设置中文的乱码问题 原因:response缓冲区
Java注解和反射笔记
Java注解和反射笔记 1 注解 1.1 定义 Annotation是从JDK1.5开始引入的技术 作用 不是程序本身,可以对程序作出解释 可以被其他程序(编译器等)读取 格式 @注释名,可以添加一些数值 注解可以附加在package,class,method,field上面,可以通过反射机制实现
Java IO 的分类、使用场景、缓冲流、使用例子、文件拷贝
1、什么是IO I/O 是指Input/Output,即输入和输出。 Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。 Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。 Java程序在执行
10年程序员都不一定搞清楚的文件路径
在 Java 中,文件是很常用的概念,这其中文件路径是一个很基础的内容,因为文件的创建,读取,写入和删除等操作都是依赖于文件路径的。但是你仔细看一下Java中 File 的 API 你会发现有这样三个方法返回路径。 getPath(获取路径) getAbsolutePath(获取绝对
Java代码中的魔法值
1. 前言 重构老代码中遇到了不少类似下面这种写法: public void attend(String value) { if ("0".equals(value)) { //todo } else if ("1".equals(value)) { //todo } else { //todo } } 脑壳疼!从Java语法上无懈可击,但是从业务上却让人无法理解其中 0
-
Java使用反射调用方法示例
2021-02-12 09:28:56原标题:Java使用反射调用方法示例本文实例讲述了Java使用反射调用方法。希望对大家有帮助,下面就随动力节点java学院小编一起看看Java使用反射调用方法吧。一 、代码import java.util.*;import java.io.*;import ... -
Java反射调用某个类的方法(带参数和不带参数)
2021-02-25 20:28:42不多说,直接贴代码,不懂查API,现在就列取要用的方法和类。Class类:public Method getDeclaredMethod(Stringname, Class>...parameterTypes) throws NoSuchMethodException, SecurityException返回一个Method... -
java 反射 调用私有方法(有参数私有方法)获取私有属性值
2017-10-22 17:17:46java 反射 调用私有方法(有参数私有方法)获取私有属性值 -
Java 反射调用类的函数,并传递参数
2019-04-01 20:03:43文章目录Java 反射调用类的函数,并传递参数示例 Java 反射调用类的函数,并传递参数 通过类的包路径和函数名称以及已知参数类型,进行传参函数调用 示例 被调用函数 public class Test { public void testInvoke... -
java通过反射机制动态调用方法(可传参)
2019-11-09 17:04:301.DynamicExecute工具类: package ... import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import com.vrv.cems.service.cascade.mq.cor... -
java反射动态调用传参
2017-03-11 11:01:37import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MethodTest { public static void main(String[] args) { String [] names ={"tom -
通过 java 反射调用方法的坑 java.lang.NoSuchMethodException
2020-06-25 00:48:42有时候通过java反射调用方法 会报 java.lang.NoSuchMethodException ,但是进入类里面查看,明明是有这个方法,咋提示没有呢? 这是因为有的方法是私有的,而代码里面是通过 getMethod 方法获取,就会报这个错误。要... -
Java 反射调用方法的参数是数组的写法
2018-08-19 15:01:41package com.heatdeath.fight.sort; import java.lang.reflect.Method; import java.util.Arrays; import java.util.Random; /** * Author: heatdeath * Date: 2018/8/19 * Desc: */ public class SortUti... -
java反射如何调用参数为int的方法?
2021-02-12 18:47:31代码如下,会发生java.lang.NoSuchMethodException异常。import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.HashMap;import ... -
「java 反射」Java反射——如何通过Java中的反射调用对象的方法? - seo实验室
2021-03-05 18:51:33java 反射一.java反射拿到调用对象的方法1.通过class.forname(“包名+方法的类名”)拿到方法的对象;如:Class> clazz = Class.forName("ReflectionTest");也可以通过实例,获取方法的对象类,如:String str= ... -
java refiect调用方法传参
2021-09-06 20:49:40} } 如果知道反射调用的方法需要传几个参数 直接赋值(参数类型.class ) Class perClass=Person.class; String name="reflect"; int age=25; Object newInstance = perClass.newInstance(); Method method... -
Java反射机制:跟着代码学反射
2021-03-08 05:52:111. 前言在OOP的世界里,万物皆对象。也就是说,我们可以将任何东西抽象成一个对象。比如人,可以抽象成一个Person类,通过new Person()来实例化一个对象;再比如鸭子,可以抽象成一个Duck类,... Java反射机制概述J... -
java如何反射调用静态方法
2021-02-12 09:29:00之前使用反射的方式来调用一个实例的方法,大概代码是如下的String className=""; //类名Class[]params = null;//参数String methodName = "";//方法名Object obj; //调用方法的对象Object[] args; //调用方法传的... -
反射调用 java bean的set和get方法
2021-02-27 14:21:50importjava.beans.IntrospectionException;importjava.beans.PropertyDescriptor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;public classPropertyUtil {private static final String SET_PREFI... -
java根据方法名称取得反射方法的参数类型示例
2021-02-12 15:56:19/*** 根据方法名称取得反射方法的参数类型(没有考虑同名重载方法使用时注意)* @param obj 类实例* @param methodName 方法名* @return* @throws ClassNotFoundException*/public static Class[] getMethodParamTypes... -
JAVA 反射(Invoke方法,调用传入参数的相应方法)
2018-08-18 17:49:222)运行时调用对象方法。 3)运行时判断对象所属的类; 4)运行时判断任意一个类所具有的成员变量和方法; 5)反射API可以获取程序在运行时刻的内部结构。 6)使用反射的一个最大的弊端是性能比较差。相同的操作... -
Java反射实现调用带参方法
2021-02-12 14:28:50import java.lang.reflect.Method;import java.lang.reflect.Field;import java.beans.PropertyDescriptor;public class PropertyUtil {public static PropertyDescriptor getPropertyDescriptor(Class clazz, Stri.... -
Java 反射调用带基本数据类型参数的方法
2015-07-12 21:36:39Java 反射 基本数据类型 -
反射调用private方法实践(php、java)
2021-03-05 11:40:04单测中有个普遍性的问题,被侧类中的private方法无法直接调用。小拽在处理过程中通过反射改变方法权限,进行单测,分享一下,直接上代码。简单被测试类生成一个简单的被测试类,只有个private方法。单测代码... -
java反射调用方法list入参
2021-06-19 11:29:38针对这些的同学,在这分享总结的Java面试的高频面试题(包括了Java集合,JVM,并发与多线程,Spring,MyBaits,微服务,Dubbo,Kakfa,中间件,Redis,数据库,设计模式等),进行了整理,免费分享给大家,希望大家能... -
利用Java反射机制调用类的私有方法
2021-09-09 16:59:03利用Java反射机制调用类的私有方法引言来吧·展示参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn.stady; import java.lang.reflect.... -
java 反射调用有参方法,并传递参数
2014-06-30 19:08:40Class cla=Class.forName(classpath);...//下面两种方法是等效的,并注意method.invoke方法参数是可变 //Method method = cla.getMethod(requestParam,String.class,int.class); method.invoke(o, new Object -
JAVA反射传入方法名调用该方法
2021-08-17 16:07:47动态传入一个方法名,例如:“getJobName”,获取该对象得值。 public class Test { public static void main(String[] args) throws Exception { InterviewMessage interviewMessage = new InterviewMessage(); ... -
java反射调用private方法,统统都会!
2021-07-10 22:28:17不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下 Java面试精选题、架构实战文档传送门:点击这里免费领取 记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花...