Java如何接收使用反射执行方法所返回的值

Java如何接收使用反射执行方法所返回的值,第1张

import javalangreflectConstructor;

import javalangreflectMethod;

public class ReflectDemo {

public static void main(String[] args) throws Exception {

// 获取字节码文件对象

Class c = ClassforName("cnitcast_01Person");

// 获取所有的方法

// Method[] methods = cgetMethods(); // 获取自己的包括父亲的公共方法

// Method[] methods = cgetDeclaredMethods(); // 获取自己的所有的方法

// for (Method method : methods) {

// Systemoutprintln(method);

// }

Constructor con = cgetConstructor();

Object obj = connewInstance();

/

  Person p = new Person(); pshow();

 /

// 获取单个方法并使用

// public void show()

// public Method getMethod(String name,Class<> parameterTypes)

// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型

Method m1 = cgetMethod("show");

// objm1(); // 错误

// public Object invoke(Object obj,Object args)

// 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数

m1invoke(obj); // 调用obj对象的m1方法

Systemoutprintln("----------");

// public void method(String s)

Method m2 = cgetMethod("method", Stringclass);

m2invoke(obj, "hello");

Systemoutprintln("----------");

// public String getString(String s, int i)

Method m3 = cgetMethod("getString", Stringclass, intclass);

Object objString = m3invoke(obj, "hello", 100);

Systemoutprintln(objString);

// String s = (String)m3invoke(obj, "hello",100);

// Systemoutprintln(s);

Systemoutprintln("----------");

// private void function()

Method m4 = cgetDeclaredMethod("function");

m4setAccessible(true);

m4invoke(obj);

}

}

java的反射用法:(异常请自行处理)

①找到类:Class cl = ClassforName("javautilDate");

②创建对象(要求这个类中含有空参数的构造方法):Object obj = clnewInstence();

③根据名称和参数找方法:Method method1 = clgetMethod("getTime");//如果没有参数不用写第二个参数如果有参数的如:Method method2 = clgetMethod("setTime",longclass);

④在某个对象上面执行方法,Object result = method1invoke(obj);//如果有参数的Object result = method2invoke(obj,21317362721);

执行的方如果有返回值,将返回值返回,否则返回null

答案是没法获取。

首先反射获取的是类、属性、或者方法的定义,就拿方法来说,方法的定义是什么呢?

方法的定义包括:方法名,方法的参数类型列表,方法的返回值类型。

方法的参数类型列表包括什么呢?

包括每个参数的顺序和参数类型。

参数值是什么?是在这个方法被调用的时候传入的参数叫做参数值。反射呢,是获取的它的定义,并不牵扯调用,所以说没法获取。

不能,反射是可以拿到对象的属性,方案,类等信息,如一个Persion类,有name属性,也有相应的get/set方法,你可以通过反射去修改这个name的的值,但你不能在运行getName方法时去改变它的返回值,必须利用代理,在方法外面做拦截。 利用AOP,在返回前改变值即可,Aop的核心也就是动态代理。

以上就是关于Java如何接收使用反射执行方法所返回的值全部的内容,包括:Java如何接收使用反射执行方法所返回的值、在JAVA中,怎么利用反射获取一个方法、java 通过反射怎么获取方法中参数值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9344580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存