Java反射机制获取set()方法 并且为set()方法传值

Python014

Java反射机制获取set()方法 并且为set()方法传值,第1张

Class.getDeclaredMethod() 是获取这个类中所有的方法,返回的是Method[]如果有参数,第1个是方法名称,第2个是该方法的所有参数数组,这样返回的是Method这个对象Method.invoke() 传入调用方法的类,另一个是调用这个方法所需要的参数,如果该方法没有参数,可以不填写,在JDK1,4之前,第2个参数是传入一个数组的,但是在jdk1.5之后,可以不传数组,多个参数用逗号隔开 不知道你听明白没

亲,以下是我写的例子,你可以参考:

import java.lang.reflect.Field

import java.util.Arrays

import static java.lang.System.out

enum Tweedle { DEE, DUM }

public class Book {

public long chapters = 0

public String[] characters = { "Alice", "White Rabbit" }

public Tweedle twin = Tweedle.DEE

public static void main(String... args) {

Book book = new Book()

String fmt = "%6S: %-12s = %s%n"

try {

Class<?>c = book.getClass()

Field chap = c.getDeclaredField("chapters")

out.format(fmt, "before", "chapters", book.chapters)

chap.setLong(book, 12)

out.format(fmt, "after", "chapters", chap.getLong(book))

Field chars = c.getDeclaredField("characters")

out.format(fmt, "before", "characters",

Arrays.asList(book.characters))

String[] newChars = { "Queen", "King" }

chars.set(book, newChars)

out.format(fmt, "after", "characters",

Arrays.asList(book.characters))

Field t = c.getDeclaredField("twin")

out.format(fmt, "before", "twin", book.twin)

t.set(book, Tweedle.DUM)

out.format(fmt, "after", "twin", t.get(book))

// production code should handle these exceptions more gracefully

} catch (NoSuchFieldException x) {

x.printStackTrace()

} catch (IllegalAccessException x) {

x.printStackTrace()

}

}

}

输出:

BEFORE: chapters = 0

AFTER: chapters = 12

BEFORE: characters = [Alice, White Rabbit]

AFTER: characters = [Queen, King]

BEFORE: twin = DEE

AFTER: twin = DUM

如果对你有帮助的话,请采纳一下。如果有任何问题,都可以联系我!

JAVA中反射是动态获取信息以及动态调用对象方法的一种反射机制。

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。而这也是Java被视为动态语言的一个关键性质。

Java反射的功能是在运行时判断任意一个对象所属的类,在运行时构造任意一个类的对象,在运行时判断任意一个类所具有的成员变量和方法,在运行时调用任意一个对象的方法,生成动态代理。

扩展资料:

JAVA中反射实例:

1、Class superClass=clazz.getSuperclass()//获取父类。

System.out.println("getSuperclass:"+superClass)。   

2、Class[] interfaces=clazz.getInterfaces()//获取实现接口。

System.out.println("getInterfaces:"+interfaces.length)。

3、Constructor[] cons=clazz.getConstructors()//构造方法。

System.out.println("getConstructors:"+cons.length)。

参考资料来源:百度百科: JAVA反射机制