「java通过反射调用方法」java反射调用构造方法
本篇文章给大家谈谈java通过反射调用方法,以及java反射调用构造方法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、通过java 反射 调用bean中的get方法
- 2、如何通过java 反射 调用一个 含有 可变参数的 方法呢 ??
- 3、java反射调用方法可以传非基本类型吗?如对象、接口
- 4、java 反射机制的几个调用方法
通过java 反射 调用bean中的get方法
public String getValue(User u,String name){
String value = "";
Method[] m = u.getClass().getMethods();
for(int i=0;im.length;i++){
if(("get"+name).toLowerCase().equals(m[i].getName().toLowerCase())){
try {
value = (String) m[i].invoke(u);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return value;
}
如何通过java 反射 调用一个 含有 可变参数的 方法呢 ??
java反射调用可变参数的方法的方式是传入objects参数,如下代码:
public class Reflect {
public static void main(String[] args) throws Exception {
Class? clazz = Single.class;
Single single = (Single) clazz.newInstance();
ListString list = new ArrayListString(){
private static final long serialVersionUID = 1L;
{
add("fuck");
add("ni");
add("mei");
}
};
//获取method两种方式, 在method中 数组的的空间大小是可以随便写的不一定使用0
/* 1 */
Method method = clazz.getDeclaredMethod("method", Array.newInstance(Object.class, 0).getClass());
/* 2 */
method = clazz.getDeclaredMethod("method", (new Object[0]).getClass());
//初始化参数
/* 1 */
Object objs = Array.newInstance(Object.class, 2);
Array.set(objs, 0, list);
Array.set(objs, 1, "23");
method.invoke(single, objs);
/* 2 */
Object[] objects = {1, "fuck", list};
method.invoke(single, new Object[]{ objects });
}
}
class Single {
public void method(Object... objs) {
System.out.println(Arrays.deepToString(objs));
}
}
结果:
[[fuck, ni, mei], 23]
[1, fuck, [fuck, ni, mei]]
java反射调用方法可以传非基本类型吗?如对象、接口
可以的,参数类型是没有限制的。通过以下代码可以证明。
接口:
public interface MyInterface {
void print();
}
实现类:
public class MyInterfaceImpl implements MyInterface {
@Override
public void print() {
System.out.println("interfaceImpl");
}
}
通过反射调用方法:
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
Test instance = Test.class.newInstance();
Method method = Test.class.getDeclaredMethod("test", MyInterface.class);
MyInterface myInterface = new MyInterfaceImpl();
method.invoke(instance, myInterface);
}
public void test(MyInterface myInterface) {
myInterface.print();
}
}
java 反射机制的几个调用方法
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
/**
* Created by IntelliJ IDEA.
* File: TestRef.java
* User: leizhimin
* Date: 2008-1-28 14:48:44
*/
public class TestRef {
public staticvoid main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Foo foo = new Foo("这个一个Foo对象!");
Class clazz = foo.getClass();
Method m1 = clazz.getDeclaredMethod("outInfo");
Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
Method m3 = clazz.getDeclaredMethod("getMsg");
m1.invoke(foo);
m2.invoke(foo, "重新设置msg信息!");
String msg = (String) m3.invoke(foo);
System.out.println(msg);
}
}
class Foo {
private String msg;
public Foo(String msg) {
this.msg = msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void outInfo() {
System.out.println("这是测试Java反射的测试类");
}
}
关于java通过反射调用方法和java反射调用构造方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-21,除非注明,否则均为
原创文章,转载请注明出处。