黑马程序员技术交流社区

标题: 如何获取实参的变量名 [打印本页]

作者: 绿树林    时间: 2013-4-6 10:56
标题: 如何获取实参的变量名
本帖最后由 郭华章 于 2013-4-8 10:55 编辑

在不改变main方法的情况下,如何在printCollection 方法中获取传入的实参变量名?
  1. public static void main(String[] args) throws Exception {

  2.                 ArrayList<String> eleString=new ArrayList<String>();
  3.                 eleString.add("123");
  4.                 eleString.add("abc");
  5.                
  6.                 ArrayList<Integer> eleInteger=new ArrayList<Integer>();
  7.                 eleInteger.add(123);
  8.                 eleInteger.add(456);
  9.                
  10.                 printCollection(eleString);
  11.                 printCollection(eleInteger);
  12.         }

  13.         private static void printCollection(ArrayList<?> arr) throws Exception {
  14.                 System.out.println("输出打印变量的名字");//如何输出变量名,如上面的eleString、eleInteger
  15.                
  16.                 for(Object obj:arr)
  17.                         System.out.println(obj);
  18.         }
复制代码

作者: 绿树林    时间: 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
  1. Method myMethod = Test.class.getMethod("printCollection", ArrayList.class);
  2.         
  3.         Type[] types = myMethod.getGenericParameterTypes();
  4.         System.out.println(types[0]);//打印参数化的类型
  5.         
  6.         ParameterizedType pType = (ParameterizedType)types[0];
  7.         
  8.         System.out.println(pType.getActualTypeArguments()[0]);//打印类型参数
  9.         
  10.         System.out.println(pType.getRawType());//打印原始类型参数
复制代码
按照上面的代码可以获取很多东西,获取实际参数名字其实是没有意义的
作者: 黄玉昆    时间: 2013-4-8 09:04
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2