通过Java的反射机制调用某个方法,并传入参数。
1.只传入一个参数hello world:
import java.lang.reflect.Method;
import java.util.Date;
public class InvokeMethodTest {
public static void main(String[] args) {
test1();
}
public static void test2() {
try {
Class<?> c = Class.forName("java.util.Date");
// 反射类的方法:
Method m = c.getMethod("getTime", new Class<?>[] {});
long l = (Long) m.invoke(c.newInstance(), new Object[] {});
System.out.println(l);
// 反射一个类的实例:
Date d = (Date) c.newInstance();
System.out.println(d.getTime());
} catch (Exception e) {
}
}
public static void test1() {
try {
Class<?> c = InvokeMethodTest.class;
// 反射类的方法:
Method m = c.getMethod("print", String.class);
m.invoke(c.newInstance(),"hello world");
} catch (Exception e) {
System.out.println(e);
}
}
public static void print(String printData) {
System.out.println("=====================================");
System.out.println(printData);
}
public static void print(String firstPrintData,String secondPrintData) {
System.out.println("=====================================");
System.out.println("firstPrintData:"+firstPrintData+", secondPrintData:"+secondPrintData);
}
}
2.传入两个参数hello world以及 i am lee
import java.lang.reflect.Method;
import java.util.Date;
public class InvokeMethodTest {
public static void main(String[] args) {
test1();
}
public static void test2() {
try {
Class<?> c = Class.forName("java.util.Date");
// 反射类的方法:
Method m = c.getMethod("getTime", new Class<?>[] {});
long l = (Long) m.invoke(c.newInstance(), new Object[] {});
System.out.println(l);
// 反射一个类的实例:
Date d = (Date) c.newInstance();
System.out.println(d.getTime());
} catch (Exception e) {
}
}
public static void test1() {
try {
Class<?> c = InvokeMethodTest.class;
// 反射类的方法:
Method m = c.getMethod("print", String.class, String.class);
m.invoke(c.newInstance(),"hello world","I am lee");
} catch (Exception e) {
System.out.println(e);
}
}
public static void print(String printData) {
System.out.println("=====================================");
System.out.println(printData);
}
public static void print(String firstPrintData,String secondPrintData) {
System.out.println("=====================================");
System.out.println("firstPrintData:"+firstPrintData+", secondPrintData:"+secondPrintData);
}
可以比较 这两句话有什么区别,就可以知道更多的参数该怎样传,简单但是很少用到过,记录一下收工
Method m = c.getMethod("print", String.class, String.class);
m.invoke(c.newInstance(),"hello world","I am lee");
通过Java的反射机制调用某个方法,并传入参数。1.只传入一个参数hello world:import java.lang.reflect.Method;import java.util.Date;public class InvokeMethodTest { public static void main(String[] args) { test1();...
近期看到
invoke
方法
第一个
参数
的另外一种传法,如下:
public class Event {
public static final String TAG= "Event";
public static void test(){
Log.d(TAG, "Event test: ");
Class<?> aClass = Cl...
反射
传人多
参数
方法
文章目录
反射
传人多
参数
方法
一、单个
方法
传入多
参数
?1.创建一个
方法
2.创建一个
调用
方法
的主
方法
二丶读取本地文件的方式总结
一、单个
方法
传入多
参数
?
1.创建一个
方法
package com.system.modules.admin.product.service;
import
java
.util.Arrays;
* @author xiaole
public class Test3 {
public void method(Object... objs) {
对于外部
调用
的动态库应用
反射
时要用到Assembly.LoadFile(),然后才是获取类型、执行
方法
等;
当用
反射
创建当前程序集中对象实例或执行某个类下静态
方法
时只需通过Type.GetType("类的完整名")。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
通过
反射
的机制,可以通过
invoke
方法
来
调用
类的函数。
invoke
函数的第一个
参数
是
方法
的实例,如果该
方法
是静态
方法
,可以用null或者用类来代替,第二个
参数
是变长的,是
调用
该
方法
的
参数
。
package com.tn.class;
import
java
.lang.reflect.Method;
import
java
.util.Arrays;
public class Client {
public static void main(String[] args) throws Except
在框架中经常会会用到method.
invoke
()
方法
,用来执行某个的对象的目标
方法
。以前写代码用到
反射
时,总是获取先获取Method,然后传入对应的Class实例对象执行
方法
。然而前段时间研究
invoke
方法
时,发现
invoke
方法
居然包
含
多态的特性,这是以前没有考虑过的一个问题。那么Method.
invoke
()
方法
的执行过程是怎么实现的?它的多态又是如何实现的呢?
本文将从
java
和JVM的源码实现深入探讨
invoke
方法
的实现过程。
首先给出
invoke
方法
多态特性的演示代码:
public
1. 获取该类的Class对象,如:Class cls = obj.getClass()。
2. 通过Class对象获取该
方法
的Method对象,如:Method method = cls.getMethod("methodName", parameterTypes)。
3.
调用
该
方法
,如:Object result = method.
invoke
(obj, args)。
其中,methodName为需要
调用
的
方法
名,parameterTypes为该
方法
的
参数
类型数组,args为该
方法
的
参数
值数组,obj为该
方法
所在的对象。
调用
成功后,返回该
方法
的返回值。