java反射,自动调用方法,方法的返回值类型是不一定的,怎么得到方法的返回值类型的原来的类型!

java反射动态获取方法的返回值类型?
图片说明
图片说明
代码如下:

 package javase;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class Person {
    static List<String> list;

    public void eat() {
        System.out.println("我是eat()函数");
    }

    public String sayHello(String name) {
        return "hello,我是" + name + "!";
    }

    public String jump(String name, int age) {
        return "hello,我是" + name + ",我今年" + age + "岁了!";
    }

    public List<String> returnList() {
        // List<String> list = new ArrayList<String>();
        list = new ArrayList<String>();
        list.add("令狐冲");
        list.add("韦小宝");
        list.add("张无忌");
        list.add("杨过");
        list.add("乔峰");
        return list;
    }

    public static void main(String[] args) throws Exception {
        Class cla = Class.forName("javase.Person");
        Constructor constructor = cla.getConstructor();
        Object obj = constructor.newInstance();
        Method[] declaredMethods = cla.getDeclaredMethods();
        for (Method method : declaredMethods) {
            System.out.println(method.getName() + " / " + method);
            Class[] parameterTypes = method.getParameterTypes();
            if (parameterTypes.length > 0) {
                System.out.print(method.getName() + "方法的参数类型:");
            } else {
                System.out.print(method.getName() + "方法没有参数");
            }
            for (Class parameterType : parameterTypes) {
                System.out.print(parameterType.getName() + "\t");
            }
            System.out.println("\n--------------------------------------------------");
        }
        System.out.println("******************************");
        // 使用反射,动态调用对象的函数
        Method method = cla.getMethod("eat");
        Object returnValue = method.invoke(obj);
        System.out.println(returnValue);
        // 动态调用对象的函数
        Method method2 = cla.getMethod("sayHello", String.class);
        Object returnValue2 = method2.invoke(obj, "令狐冲");
        System.out.println(returnValue2);
        // 动态调用对象的函数
        Method method3 = cla.getMethod("jump", String.class, int.class);
        Object returnValue3 = method3.invoke(obj, "令狐冲", 16);
        System.out.println(returnValue3);
        // 动态调用对象的函数
        Method method4 = cla.getMethod("returnList");
        Type returnType = method4.getGenericReturnType();
        System.out.println(method4.getName() + "方法的返回值类型=" + returnType);
        /*
         * returnList方法返回值类型是List<String>,所以returnValue4变量原本的类型是List<String>
         * 还有一个问题值得我们思考,每个方法的返回值类型都可能不一样,我们在利用反射调用完invoke()方法后,得到的返回值类
         * 型都是Object,怎么转换回每个方法它自己的原本的返回值类型呢?
         */
        Object returnValue4 = method4.invoke(obj);
        System.out.println("方法的返回值类型:" + method4.getReturnType().cast(method4.invoke(obj)));
        System.out.println(returnValue4 + " / " + returnValue4.getClass());
        for (String str : list) {
            System.out.println("利用反射自动调用完returnList方法后集合元素" + str);
        }
        List<String> returnValue5 = (List<String>) method4.invoke(obj);
        for (String string : returnValue5) {
            System.out.println(string);
        }

    }

}

一言以蔽之,我就是想做到如下的代码这样:

 Method method4 = cla.getMethod("returnList");
 //我想下面的Object变成动态数据类型(即returnList方法的返回值类型) 
 Object returnValue4 = method4.invoke(obj);
 //有没有可能变成下面这样
  method4.getReturnType() returnValue4 = (method4.getReturnType())method4.invoke(obj);
    //到时候就可以拿到每个方法的具体的返回值,方法返回Map,我就可以拿到Map,方法返回int,我就拿到int,方法返回String,我就拿到String,方法返回List<Student>,我就可以拿到List<Student>

运行结果截图:
图片说明
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java使用反射调用类方法

我现在的程序如下: ``` public class Ob { private String classPath; private String methodName; private Map<String, Object> para; } class Demo2 { public void print(String string) { System.out.print(string+"demo2"); } } class Demo { public void print(String string,int i) { System.out.print(string+i+"demo1"); } } ``` 我想编写一个方法:它接收ob对象,根据ob对象的属性反射调用其他类的方法,调用的实参由ob的para获得. 我想到的是使用map设置实参,或者你有更好的办法也可以. 请问如何实现?可以帮我完成这个demo么?

java怎么在另外一个类里面调用一个无返回值方法里面的局部变量呢?

在mqtt订阅代码里面,我想将订阅的消息里面的部分内容提取出来作为另外一个方法里的变量。但是mqtt的messagearrived方法默认是无返回值的,所以想知道该怎么调用一个无返回值方法的局部变量。 public static void subscribe() { try { MqttClient client = new MqttClient(serviceURI, clientID, persistence); client.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { System.out.println("订阅者连接丢失..."); System.out.println(cause.getMessage()); } @Override public void messageArrived(String topic, MqttMessage message) { String mes =message.toString(); String rssi = mes.substring(mes.indexOf("rssi")+7,mes.indexOf("ibeaconTxPower")-2); int abc = Integer.parseInt(rssi); System.out.println("第一个网关的RSSI值: "+Integer.parseInt(rssi)); } @Override public void deliveryComplete(IMqttDeliveryToken token) { } }); MqttConnectOptions connectOptions = new MqttConnectOptions(); connectOptions.setUserName(username); connectOptions.setPassword(password.toCharArray()); connectOptions.setCleanSession(false); //订阅者连接订阅主题 client.connect(connectOptions); client.subscribe(topic, qos); System.out.println("订阅者连接状态: " + client.isConnected()); } catch (MqttException e) { e.printStackTrace(); } } 想要获取messagearrived里的rssi,调用到另外一个类里面

java 反射调用方法,方法内部调用了外部的jar

java 反射调用方法,方法内部调用了外部的jar,该外部jar怎么动态加载进来,现在报错: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.ifec.blueair.quartz.TaskUtils.invokMethod(TaskUtils.java:51) at com.ifec.blueair.quartz.QuartzJobFactoryDisallowConcurrentExecution.execute(QuartzJobFactoryDisallowConcurrentExecution.java:21) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: java.lang.NoClassDefFoundError: com/ifec/blueair/framework/util/RandomNumberUtil at com.ifec.blueair.quartz.task.TaskContentPoolSpring.getContentPoolTaskContentPoolTest(TaskContentPoolSpring.java:16) ... 8 more

Java反射机制的方法调用

大哥们,初学Java两个月的小白,这两天复习反射有点懵,今晚又发现个问题,就是再空参内添加一句输出语句,再创建个show方法给个输出语句,到测试类中时,当我获得构造器后再使用Method获取show方法时,两句语句会同时一起在控制台进行输出.可是我只想输出个show方法,该咋整啊?![图片说明](https://img-ask.csdn.net/upload/201905/13/1557755006_366482.png) 在这红框第一步操作时,控制台可输出a,但是使用method获得方法又不得去使用第一步的操作,我该怎么操作才能在控制台只输出一个b的结果.

java中同一方法名且返回值类型不同的两个方法,是方法的重载吗?

int add(int a,int b){ System.out.println("方法一"); return a + b; } /** * * @param a * @param b * @param c * @return */ long add(int a,int b ,String c){ System.out.println("方法四"); return a + b + Integer.parseInt(c);

Java动态代理的invoke方法返回值如何够自己定义?

Java动态代理的invoke方法返回值,想根据不同的接口调用标识加载不同的xml获取相应的bean属性,设置对应的值返回。

java中除了非void方法有返回值需要用到return语句外

java中除了非void方法有返回值需要用到return语句外,还有其他什么语句需要retrun语句 因为我看程序源码的时候看到一个方法有两条return 语句,我看来看去只发现这段程序代码只有一个方法,其中还有if....else if语句还有try....catch语句。

求解答 JAVA 自定义JDialog 外部调用 如何返回值

自定义一个字体Jdialog 很粗糙 结构是 构造函数构造界面,构造函数的参数的 JTextArea类型 然后一个总的actionPerformed 处理事件 总的actionPerformed 我尝试不能返回值 问老师 老师讲两种jdialog返回值形式 一种 类似 showconfirmdialog 直接返回值,这个不会 另外一种 类似 fileopendialog 调用get函数 获得返回值,但是 fileopendialog 是一个fiechooser类中的函数 我不知道如何在类的子函数中弄出一个界面,而且不清出构造一个类的实例,但是这个类的实例什么时候运行完,如何在实例运行结束前调用get函数。 想过定义static 但是当第二次调用dialog时返回值返回值的问题虽然可以正确返回,但感觉不是很好,fieopendialog中当点确认时会返回一个int,帮助确定对话框运行结束并点击确定但是,我不会返回值 。或者可以用返回值是否为null确定 当时当第二次时就没办法用了 求大神解答 谢谢

反射中调用方法传入参数类型一样 却报错

object obj = Activator.CreateInstance(objectType);// 创建实例 反射创建一个实例 MethodInfo methodInfo = obj.GetType().GetMethod("Parse"); //调用里面的Parse 方法 这个方法需要参数 List<SerializabBaseObject> methodInfo.Invoke(obj, new object[]{items}); //items 是List<SerializabBaseObject>类型的参数 ,这样应该没错吧 。但是 在Invoke 是报错了。 类型“System.Collections.Generic.List`1[ORMTool.SerializabBaseObject]”的对象无法转换为类型“System.Collections.Generic.List`1[ORMTool.SerializabBaseObject]”。 类型是一样的 为什么会不能转换呢?

定义返回值类型为boolean类型的方法,该方法的返回值可以做为判断条件吗?

主方法中的部分语句块需要做条件判断,直接调用返回值类型为boolean类型的方法,当作循环条件???

java中在输出语句中的返回值和用对象接收的返回值区别?

在Service层中有User类型返回值的find()方法, 然后在Servlet层中: User user = userService.find(); System.out.println(user); System.out.println(userService.find()); 像这样的直接调用方法输出和先接收再输出有什么不同?实际中两者底层操作不一样。求解答!

Activiti 如何获取uel调用方法后的返回值

activiti 在usertask的listener中使用uel调用spring bean带返回值的方法,该如何获取返回值?

java中反射使用参数不确定怎么办

我现在传递一个对象进来,方法名不确定,参数不确定。请问如何用反射执行?或者有其他的代替方案。 例如:我在客户端传一个对象到服务器端,服务端不管发送多来的是什么对象,要求执行对象的什么方法,服务器都能完成并返回这个对象。

【新手求教】java编了一段程序,数组调用方法返回值都为0,求解正确的方法

import java.util.*; import static java.lang.System.out; public class Array { public static int getmax(int[]a){ int max=a[0]; for(int elem:a) if(elem>max) max=elem; return max; } public static int getmin(int[]a){ int min=a[0]; for(int elem:a) if(elem<min) min=elem; return min; } public static int getsum(int[]a){ int sum=0; for(int elem:a) sum=sum+elem; return sum; } public static double getaverage(int[]a){ int sum=0; for(int elem:a) sum=sum+elem; double average=sum/3; return average; } public static void main(String[]args){ out.println("请输入三个整数"); int[]a=new int[3]; for(int elem:a) elem=new Scanner(System.in).nextInt(); out.println("最大值="+getmax(a)); out.println("最小值="+getmin(a)); out.println("求和:"+getsum(a)); out.println("平均值="+getaverage(a)); } }

java 自定义注解如果自动调用

自己写了一个自定义注解,然后可以作用在方法上,请问还需要怎么做才可以在调用这个方法时自动调用相应的操作,类似于参数验证注解那样

c#调用java写的wsdl,接收不到返回值

c#引用一个java写的wsdl,调用服务里的一个返回值为string 的方法,报以下异常: {"接收对 http://172.17.175.162/swsso/services/SsoWebService 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参见服务器日志。"} http://172.17.175.162/swsso/services/SsoWebService 这是一个只能内网调用的服务, 引用后web.config自动产生的配置 <system.serviceModel> <bindings> <basicHttpBinding> <binding name="SsoWebServiceSoapBinding" /> </basicHttpBinding> </bindings> <client> <endpoint address="http://172.17.175.162/swsso/services/SsoWebService" binding="basicHttpBinding" bindingConfiguration="SsoWebServiceSoapBinding" contract="MySsoServiceReference.SsoWebService" name="SsoWebServiceImplPort" /> </client> </system.serviceModel> 服务器用的是 windows server pack 2 IIS 用的7.0 调用方法的代码是 var ssows = new MySsoServiceReference.SsoWebServiceClient(); ssows.Open(); string result = ssows.appLoginEx1(appCode, ticket);//这里异常报错,方法的传入参数都是string ssows.Close(); 网上看了好多解决方案,测试了都不行,希望那个前辈能指教一下!

java怎么将无返回值的方法中的局部变量调用出来?

![图片说明](https://img-ask.csdn.net/upload/201904/16/1555402232_102697.png) 为什么图中那行调用方式会报错呢? 我想将字符串mes提取出来作为一个public String 该怎么做呢?

抽象类的实例方法能通过反射来调用吗?

# **不用继承该抽象类,只是借助该抽象类就能通过反射来调用抽象类的实例方法吗?**

java 反射调用无法使用

implClass:反射调用类的路径 implMethod:反射调用类的方法名称 `Class clazz = ClassUtil.findClass(implClass); Class[] paraTypes = new Class[]{String.class,Boolean.class,Connection.class }; Method method = clazz.getMethod(implMethod,paraTypes); String execRow = String.valueOf(method.invoke(clazz.newInstance(),subDate.replace("-",""),flag,con)) ;` 在执行method.invoke()报错,错误提示为:反射调用类的路径

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

立方体线框模型透视投影 (计算机图形学实验)

计算机图形学实验 立方体线框模型透视投影 的可执行文件,亲测可运行,若需报告可以联系我,期待和各位交流

2019 AI开发者大会

2019 AI开发者大会

组成原理课程设计(实现机器数的真值还原等功能)

实现机器数的真值还原(定点小数)、定点小数的单符号位补码加减运算、定点小数的补码乘法运算和浮点数的加减运算。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

软件测试2小时入门

软件测试2小时入门

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

计算机图形学-球的光照模型课程设计

计算机图形学-球的光照模型,有代码完美运行,有课程设计书

Linux常用命令大全(非常全!!!)

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考: 系统信息 arch 显示机器的处理器架构 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 d...

因为看了这些书,我大二就拿了华为Offer

四年了,四年,你知道大学这四年我怎么过的么?

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

fakeLocation13.5.1.zip

fakeLocation13.5.1 虚拟定位 ios13.5.1的最新驱动下载,iPhone/iPad免越狱虚拟定位工具Location-cleaned驱动已更新

UnityLicence

UnityLicence

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

土豆浏览器

土豆浏览器可以用来看各种搞笑、电影、电视剧视频

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

php+mysql学生成绩管理系统

学生成绩管理系统,分三个模块:学生,教师和管理员。 管理员模块:负责学生、老师信息的增删改;发布课程信息的增删改,以便让学生选课;审核老师提交的学生成绩并且打印成绩存档;按照课号查询每个课号的学生成绩

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

推荐24个国外黄色网站欣赏

在中国清朝,明黄色的衣服只有皇子才有资格穿,慢慢的黄色在中国就成了高贵的颜色。在人们的色彩印象中,黄色也表现为暂停。所以当你的网页设计采用黄色的时候,会让人们在你的网页前停留。 黄色,就像橙色和红色,黄色也是一个暖色。它有大自然、阳光、春天的涵义,而且通常被认为是一个快乐和有希望的色彩。黄色是所有色相中最能发光的颜色,给人轻快,透明,辉煌,充满希望的色彩印象。 黄色是一个高可见的色...

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

C++语言基础视频教程

C++语言基础视频教程

玩转Python-Python3基础入门

玩转Python-Python3基础入门

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问