题目可能比较拗口,我这里细细的说下我的问题,求指教:
假设:   
public class A {
     public String name ; //小哥我这里是要解决问题,不搞那些浪费时间的封装
     public long   age  ;
}
---------------------------
上面是比较简单的实体类,接着:
public class B(){
     public static void main(String[]args){
          A a = new A();
          B b = new B();
          String isAClassName = b.getObjectName(a);
          System.out.println(isAClassName);
     }
     public String getObjectName(Object obj){//查处obj对象的名字,注意,是对象名,不是类名
          ......
     }
}
-----------------------------问题:
     请问,getObjectName()该怎么写???PS:是对象名,不是类名,类名getClass().getName()我也知道,我指的是对象名,求指教!!!
我指的是对象名,求指教!!!

解决方案 »

  1.   

     return obj.getClass().getSimpleName();  这样就 可以了 不知道是不是你需求
      

  2.   


    A a = new A();
    A是类名,
    a是对象名 。
    -------------------------
    可能我理解的和你不一样,反正就是,b.getObjectName(a),返回值就是a
      

  3.   


    不是,就是A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",这个很有用处!
      

  4.   


    http://stackoverflow.com/questions/744226/java-reflection-how-to-get-the-name-of-a-variable这个问题基本是不能解决的,你可能需要使用JDK之外的其他工具来开发这个功能,我上STACKOVERFLOW帮你询问了这个问题,然后找到了这个解答,可以一看~
      

  5.   


    1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
    ---------------------
    解释完毕,请问:
    A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !
      

  6.   


    1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
    ---------------------
    解释完毕,请问:
    A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !
    业务里的getDeclaredField(String name)这个是Class的获取类中字段方法还是你自己写的方法啊
      

  7.   


    1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
    ---------------------
    解释完毕,请问:
    A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !不知道这样可行不 修改一下构造方法
    A a = new A("a");
    //参数传递命名的对象名字,然后类里面定义一个变量 存储变量名 再重写toString(),返回这个变量值
      

  8.   

    同时一个对象可能有多个引用名,
    比如
    Student stu = new Student();
    Student stu2 = stu;getObjName(stu); // should return "stu"
    getObjName(stu2); // should return "stu2"那么你的方法到底返回的是stu 还是 stu2呢,所以你想写这个方法本身就是有待商榷的
      

  9.   

    这样是不可行的,A a = new A("a");这种形式没有理由保证构造函数传入的String和对象名保持一致!
    比如,A aNewStudent = new A("aNewStudet");
    ----------
    所以,你的这种方法,只能是“祈祷”程序员写单词一定不会出错 !
    ----------
    或许你会说做判断机制,但是,如果都能做判断机制了,本身就表明我上面的问题解决了,那么本身你的方法又有何意义 ?所以,这方法不行 。不过很感谢你 !真的 
      

  10.   


    未必值得商榷!
    8楼给我在StackOverFlow的提问给了我灵感,如下:假定:可以用getMethodFields(Method method)查到方法里的局部变量;
    那么:
    public String getObjectName(Method method, Object methodAttri ){
          Field[] fields = getMethodFields(method);
          try{
                for(int i=0 ; i < fields.length ; i++){
                        boolean flag =fields[i].getClass.getName().equals(methodAttri.getName());
                        if(flag)
                               return fields[i].getName();
                }
          }catch(Exception e){e.printStackTrace();}
          return "";
    }
    -----------------------------------
    这种方法下,
    main(){
    Student stu = new Student();
    Student stu2 = stu;
    getObjName(stu); // return "stu"
    getObjName(stu2); // return "stu2"
    }
    当然就成立了,所以,你的疑虑没必要 。 ---------问题就在于getMethodFields(Method method)实现不了,
    也就是,无法反射得到方法中定义的属性!!!望高手指教
      

  11.   


    1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
    ---------------------
    解释完毕,请问:
    A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !
    业务里的getDeclaredField(String name)这个是Class的获取类中字段方法还是你自己写的方法啊这个是调用Class信息的!
      

  12.   


    1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
    ---------------------
    解释完毕,请问:
    A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !
    业务里的getDeclaredField(String name)这个是Class的获取类中字段方法还是你自己写的方法啊这个是调用Class信息的!
    楼主既然要获取Class信息干嘛要去获取方法内部的局部变量呢?
      

  13.   


    1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
    ---------------------
    解释完毕,请问:
    A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !
    业务里的getDeclaredField(String name)这个是Class的获取类中字段方法还是你自己写的方法啊这个是调用Class信息的!
    楼主既然要获取Class信息干嘛要去获取方法内部的局部变量呢?说错了,不是Class的信息,说错了!!!
      

  14.   

    楼主还是把你的业务需求说一下吧,java要从方法体内部获取方法体的变量或者方法的实参名称都是不行的,可能楼主你对自己的业务需求有误解。
      

  15.   


    业务:  ------- 自定义的业务
         未解决经常发生的“内存不足”,打算写一个组件,尽可能的保证不浪费内存资源。
    其中:
         问题背景:写组件时,碰到了一个问题,就是当业务相同是,程序员由于没注意到,而开辟了一个新的空间。为了解决这个问题,我采取的方法是:传入对象,如若对象的属性、权限、类型、名称一致,则不开辟空间,转而改成返回一个之前存在的对象。
         比如:
              class A{
                        private B b = new B();
                        class C(){
                                  B b = new B();//若b属性与外层完全一致,不就浪费了
                        }
              }
         所以,我想改成:
              class A{
                        private B b = new B();
                        class C(){
                                  B b = null;//若b属性与外层完全一致,不就浪费了
                        }
                        Object getObjectName(Object obj){...}
              }
      

  16.   

    业务:  ------- 自定义的业务
         未解决经常发生的“内存不足”,打算写一个组件,尽可能的保证不浪费内存资源。
    其中:
         问题背景:写组件时,碰到了一个问题,就是当业务相同是,程序员由于没注意到,而开辟了一个新的空间。为了解决这个问题,我采取的方法是:传入对象,如若对象的属性、权限、类型、名称一致,则不开辟空间,转而改成返回一个之前存在的对象。
         比如:
              class A{
                        private B b = new B();
                        class C(){
                                  B b = new B();//若b属性与外层完全一致,不就浪费了
                        }
              }
         所以,我想改成:
              class A{
                        private B b = new B();
                        class C(){
                                  B b = null;//若b属性与外层完全一致,不就浪费了
                                  b = getObjectName(b)
                        }
                        Object getObjectName(Object obj){...}
              }
      

  17.   


    业务:  ------- 自定义的业务
         未解决经常发生的“内存不足”,打算写一个组件,尽可能的保证不浪费内存资源。
    其中:
         问题背景:写组件时,碰到了一个问题,就是当业务相同是,程序员由于没注意到,而开辟了一个新的空间。为了解决这个问题,我采取的方法是:传入对象,如若对象的属性、权限、类型、名称一致,则不开辟空间,转而改成返回一个之前存在的对象。
         比如:
              class A{
                        private B b = new B();
                        class C(){
                                  B b = new B();//若b属性与外层完全一致,不就浪费了
                        }
              }
         所以,我想改成:
              class A{
                        private B b = new B();
                        class C(){
                                  B b = null;//若b属性与外层完全一致,不就浪费了
                                  b = getObjectName(b)
                        }
                        Object getObjectName(Object obj){...}
              }
    你这需求不是去判断对象属性的一致性啊,计算机还没有到人工智能的地步,程序员new一个同类的对象刚开始没有对其改变属性,并不代表这个对象就是无用的,可能后面用它来比较或者就是为了复制一份相同属性的对象又或者是为其它地方调用进行赋值等等,这个你认为根本没法知道的。防止内存不足这种的你要从java的垃圾回收机制入手,java的垃圾回收器的回收并不是那么的及时,你要做到及时那你就得自己再去进行垃圾回收管理来弥补不能及时回收的问题
      

  18.   

    从来没想过楼主的问题,java中应该没有现成的方法,但 getClass().getName() 为什么可以返回类名?看看源码或许有收获
      

  19.   


    不是,就是A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",这个很有用处!a只是个引用。对象是new A()。
      

  20.   

    好像可以用Class类能解决你的问题
      

  21.   


    不是,就是A a = new A();
    然后a是对象,其对象名就是"a",我想获取"a",这个很有用处!a只是个引用。对象是new A()。终于得到正确答案了,就是你!!!