黑马程序员技术交流社区
标题:
如何获取实参的变量名
[打印本页]
作者:
绿树林
时间:
2013-4-6 10:56
标题:
如何获取实参的变量名
本帖最后由 郭华章 于 2013-4-8 10:55 编辑
在不改变main方法的情况下,如何在
printCollection
方法中获取传入的实参变量名?
public static void main(String[] args) throws Exception {
ArrayList<String> eleString=new ArrayList<String>();
eleString.add("123");
eleString.add("abc");
ArrayList<Integer> eleInteger=new ArrayList<Integer>();
eleInteger.add(123);
eleInteger.add(456);
printCollection(eleString);
printCollection(eleInteger);
}
private static void printCollection(ArrayList<?> arr) throws Exception {
System.out.println("输出打印变量的名字");//如何输出变量名,如上面的eleString、eleInteger
for(Object obj:arr)
System.out.println(obj);
}
复制代码
作者:
绿树林
时间:
2013-4-6 12:10
怎么没人回答?
作者:
随便
时间:
2013-4-6 12:19
你获取实参变量名的目的是什么?你主要是想问反射方面的问题还是纯属好奇?
获取是参变量名没有什么实际意义吧。反射是做不到的,因为已经传给形参了。
还有就是printCollection(ArrayList<?> arr ,String eleString)这样不就行了。
没明白你的主要想法
所以没有人回答吧。
作者:
绿树林
时间:
2013-4-6 14:38
邓宫财 发表于 2013-4-6 12:19
你获取实参变量名的目的是什么?你主要是想问反射方面的问题还是纯属好奇?
获取是参变量名没有什么实际意 ...
但是在有多个List变量的情况下,并不清楚是哪个变量调用的这个方法,你得这个方法怎么能行得通吗
作者:
whs_nk
时间:
2013-4-7 20:15
程序运行时,将对象在内存中的地址传给栈中的变量,说的是变量,其实就是一个临时引用而已,当程序生成.class文件后,加载.class 文件时,临时的根本就不在了,怎么可能获得哦,通过反射获得arr.getClass().getName()实参类型已经很不错了,若是你真想获取变量名的话,可以利用Map<K,V>集合,将变量名存入K键中,这样你在遍历的时候就可以通过获取K键而获取变量名了,这种方法才是永久存储,而不是临时引用,希望能帮到你哦。一看这题目我就感觉压力山大,若是哪位高手弄出来了,请楼主一定记得告诉我哈,我说的是心里话,三人行必有我师
作者:
王川
时间:
2013-4-8 00:07
Method myMethod = Test.class.getMethod("printCollection", ArrayList.class);
Type[] types = myMethod.getGenericParameterTypes();
System.out.println(types[0]);//打印参数化的类型
ParameterizedType pType = (ParameterizedType)types[0];
System.out.println(pType.getActualTypeArguments()[0]);//打印类型参数
System.out.println(pType.getRawType());//打印原始类型参数
复制代码
按照上面的代码可以获取很多东西,获取实际参数名字其实是没有意义的
作者:
黄玉昆
时间:
2013-4-8 09:04
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2