java笔记(7)--反射之动态数组
来源:互联网 发布:python递归算法 编辑:程序博客网 时间:2024/05/02 02:36
/**
* 要把可变参数都当做是其对应的数组类型参数; 如 show(XX... is)作为show(XX[] is)调用; 若可变参数元素类型是引用类型:
* JDK内部接收到参数之后
* ,会自动拆包取出参数再分配给该底层方法,为此我们需要把这个数组实参先包装成一个Object对象或者把实际参数作为一个Object一维数组的元素再传递。
* 若可变参数元素类型是基本类型:
* JDK内部接收到参数之后,不会拆包,所以可以不必再封装.不过封装了也不会错.所以建议,不管基本类型还是引用类型都使用Object[]封装一层,保证无误.
*
*/
/**
* 以后使用反射调用方法: 推荐使用 invoke(方法底层对象, new Object[]{ 底层方法需要的实际参数 });这个应该说是万能的
*/
package cn.com.java.wwh.www;
import java.lang.reflect.Method;
import java.util.Arrays;
/**
*@类的作用:用于练习反射时的传入的参数是,动态数组
*
*
*@author 一叶扁舟
*@version 1.0
*@创建时间: 2014-2-13 上午8:21:14
*
*/
class Test{
public static void main(String [] args){
System.out.println(Arrays.toString(args));
}
public static void show1(String...args)
{
System.out.println(Arrays.toString(args));
}
public static void show2(int [] args){
System.out.println(Arrays.toString(args));
}
}
public class InvokeMethodDemo {
public static void main(String[] args)throws Exception {
// 获得类的字节码
Class<Test> test = Test.class;
Method method = test.getMethod("show1", String[].class);
System.out.println(method);
// 当调用静态的方法时,invoke的第一个参数可以为null。正常是写成
// method.invoke(test.newInstance(),"一叶扁舟","22");//错误!
// method.invoke(null,"一叶扁舟","22");//错误!它就类似show1(String s1, String s2)
// method.invoke(null,new String[]{"一叶扁舟","22"});//错误!
// method.invoke(null, new Object[]{"一叶扁舟","22"});//错误!
method.invoke(null, (Object)new String[]{"一叶扁舟","22"});//正确写法
method.invoke(null,new Object[]{new String[]{"一叶扁舟","22"}});//正确写法
// -----------------第二种情况----------------------
Method meth = test.getMethod("show2", int[].class);
// meth.invoke(null,1,2,3,4);//错误
meth.invoke(null,new int[]{1,2,3});//正确
// meth.invoke(null,new Object[]{1,2,3});//错误!
meth.invoke(null,(Object)new int[]{1,2,3});//正确
meth.invoke(null,new Object[]{new int[]{1,2,3,4}});//正确
// 加入调用Test的main方法
Method me = test.getMethod("main",String[].class);
me.invoke(null, new Object[]{new String[]{"一叶扁舟","无悔"}});
}
}
2 0
- java笔记(7)--反射之动态数组
- java反射之动态代理学习笔记
- Java学习笔记之反射的应用-动态代理
- java反射学习笔记之 动态加载类
- Java反射机制之数组的反射
- java反射实现动态扩建数组
- 利用java反射动态调整数组长度
- Java反射三 动态创建数组
- 反射 学习笔记之动态加载类
- Java学习笔记之反射
- Java学习笔记之反射
- java学习笔记之反射
- Java学习笔记之反射
- java学习笔记之反射
- Java学习笔记之反射
- 笔记:Java反射以及动态代理
- 学习笔记之动态数组
- Java 反射之JDK动态代理
- Linux环境下段错误的产生原因及调试方法小结
- ios7 修改searchbar 取消 字体 颜色
- 博客启动!
- Remove Duplicates from Sorted Array
- 高德地图VS百度地图:用技术资料来对比
- java笔记(7)--反射之动态数组
- MS SQL 2008 附件数据库出错解决方法
- “十天一本书”之35—《拆掉思维的墙》有感
- LCM时序问题
- Confluence 贡献人(Contributors)宏
- 正则表达式学习(一)
- shell学习总结之自定义函数
- oracle数据块、区间和段
- Mediawiki常见的配置和修改方法