例如我
String a1="asdfasdf";
Integer a2=new Integer(10);Object[] c=new Object[2];c[0]=a1;
c[1]=a2;然后我让c[0].getMethodXX()的出的值是我原线的定义的变量名称!例如System.out.println(c[0].getMethodXX()),打印出"a1"
System.out.println(c[1].getMethodXX()),打印出"a2"

解决方案 »

  1.   

    不能, 可以用关联数组, 如Map
      

  2.   

    String怎么会有getMethodsXX()方法?
    如果a1真是复杂对象,结果也不对,例如:
    public class AAA {private String  aa = "测试结果";public String getAa() {
    return aa;
    }
    public void setAa(String string) {
    aa = string;
    }
    }public class Test { public static void main(String[] args) {
    AAA a1= new AAA();
    Integer a2=new Integer(10); Object[] c=new Object[2]; c[0]=a1;
    c[1]=a2; System.out.println(a1.getAa());//输出的结果为“测试结果”
    }
    }
      

  3.   

    哦,理解错了楼主的意思,应该是:
    public class AAA {private String  aa = "测试结果";public String getMethod() {
    return "aa";
    }}public class Test { public static void main(String[] args) {
    AAA a1= new AAA();
    Integer a2=new Integer(10); Object[] c=new Object[2]; c[0]=a1;
    c[1]=a2; System.out.println(a1.getMethod());//输出的结果为“aa”
    }
    }
      

  4.   

    看来JDK里面没有类似的方法可以得到定义的变量名.
    为每一种类型都去定义一个或者重写一个方法,不现实.也违背了我的初衷.
      

  5.   

    理解错误,确实只能使用关联数组<script>
    aSample={"a":"aaa","b":"bbb","c":"ccc"}
    for(key in aSample){
        document.write(key+":"+aSample[key]+"<br>")
    }
    </script>
      

  6.   

    理解错误,确实只能使用关联数组
    <script>
    aSample={"a":"aaa","b":"bbb","c":"ccc"}
    for(key in aSample){
        document.write(key+":"+aSample[key]+"<br>")
    }
    </script>
      

  7.   

    看来JDK里面没有类似的方法可以得到定义的变量名.
    为每一种类型都去定义一个或者重写一个方法,不现实.也违背了我的初衷.不知道楼主得初衷是什么
    反射是可以得到变量名得,但是不能得到他得值
    你可以象反射BEAN一样 反射他变量名来组成他GET/SET方法
      

  8.   

    对于解释/编译器来说,并不关心你的变量到底是叫a1还是a2,它们只是在你实例化的时候为对象开辟一块内存空间而已,所谓的变量名只是方便阅读代码用的。何况你每次使用变量其实都是在引用它的内存地址,写代码时候的变量名早就已经被编译器的其他东西给取代了。所以没办法知道你的源代码里面的初始变量名是什么。如果你确实有这个需求,只能是自己写一个接口,其他类都需要实现这个接口。或者楼主应该把你想这么干的初衷说出来,也许这只是个钻了牛角尖的问题。
    ========================================public Collection getCollection(String objName, Map params, int start,
    int count) throws DAOException {
    try {
    // 组合检索语句
    String strSQL = "from " + objName + " d";
    if (params != null && !params.isEmpty()) {
    strSQL = strSQL + " where ";
    for (Iterator it = params.keySet().iterator(); it.hasNext();) {
    String paramName = (String) it.next();
    strSQL = strSQL + "d." + paramName + "=:" + paramName;
    }
    } Query q = getHibernateTemplate().getSessionFactory()
    .getCurrentSession().createQuery(strSQL);
    if (params != null && !params.isEmpty()) {
    for (Iterator it = params.keySet().iterator(); it.hasNext();) {
    String paramName = (String) it.next();
    q.setParameter(paramName, params.get(paramName));
    }
    }
    q.setFirstResult(start);
    q.setMaxResults(count);
    return q.list();
    } catch (HibernateException e) {
    throw new DAOException(e.getMessage());
    }
    }
      

  9.   

    目前我使用了Map方式来做的,但不知道还有没有其他更好的办法.
      

  10.   

    可以试试Class类中的getFiled()或者getDeclaredFields()之类的方法。
      

  11.   

    不可能通过反射机制得到变量的名称;我原先也这么追求过;Map就不错的;
      

  12.   

    java 对于一个对象,java能够找到持有这个对象的引用。
    比如说String对象,当失去所有持有这个对象的引用,成为unreachable的时候,要么被引入reference,要么准备被gc回收。所以系统知道那些持有这个对象的引用,但是没有提供得到这些引用的函数。或者说我们不知道。