A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 绿树林 中级黑马   /  2013-4-6 10:56  /  3271 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郭华章 于 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.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

倒序浏览
怎么没人回答?
回复 使用道具 举报
你获取实参变量名的目的是什么?你主要是想问反射方面的问题还是纯属好奇?
获取是参变量名没有什么实际意义吧。反射是做不到的,因为已经传给形参了。
还有就是printCollection(ArrayList<?> arr ,String eleString)这样不就行了。
没明白你的主要想法


所以没有人回答吧。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
邓宫财 发表于 2013-4-6 12:19
你获取实参变量名的目的是什么?你主要是想问反射方面的问题还是纯属好奇?
获取是参变量名没有什么实际意 ...

但是在有多个List变量的情况下,并不清楚是哪个变量调用的这个方法,你得这个方法怎么能行得通吗
回复 使用道具 举报
程序运行时,将对象在内存中的地址传给栈中的变量,说的是变量,其实就是一个临时引用而已,当程序生成.class文件后,加载.class 文件时,临时的根本就不在了,怎么可能获得哦,通过反射获得arr.getClass().getName()实参类型已经很不错了,若是你真想获取变量名的话,可以利用Map<K,V>集合,将变量名存入K键中,这样你在遍历的时候就可以通过获取K键而获取变量名了,这种方法才是永久存储,而不是临时引用,希望能帮到你哦。一看这题目我就感觉压力山大,若是哪位高手弄出来了,请楼主一定记得告诉我哈,我说的是心里话,三人行必有我师

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  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());//打印原始类型参数
复制代码
按照上面的代码可以获取很多东西,获取实际参数名字其实是没有意义的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马