日期:2014-05-20  浏览次数:20867 次

查询类对象的对象名
题目可能比较拗口,我这里细细的说下我的问题,求指教:
假设:   
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()我也知道,我指的是对象名,求指教!!!
我指的是对象名,求指教!!!

------解决方案--------------------
对象名不是A吗???

------解决方案--------------------
你该不会想获取a这个对象吧??  这个有啥用?
------解决方案--------------------
楼主这个需求相当于是想要在方法里面获取实参的名字啊。这个你在这个方法体里面是做不到的。不知道楼主为何有这样的需求
------解决方案--------------------

http://stackoverflow.com/questions/744226/java-reflection-how-to-get-the-name-of-a-variable

这个问题基本是不能解决的,你可能需要使用JDK之外的其他工具来开发这个功能,我上STACKOVERFLOW帮你询问了这个问题,然后找到了这个解答,可以一看~
------解决方案--------------------
引用:
Quote: 引用:

楼主这个需求相当于是想要在方法里面获取实参的名字啊。这个你在这个方法体里面是做不到的。不知道楼主为何有这样的需求


1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教

2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
---------------------
解释完毕,请问:
A a = new A();
然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !

业务里的getDeclaredField(String name)这个是Class的获取类中字段方法还是你自己写的方法啊
------解决方案--------------------
引用:
Quote: 引用:

楼主这个需求相当于是想要在方法里面获取实参的名字啊。这个你在这个方法体里面是做不到的。不知道楼主为何有这样的需求


1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教

2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
---------------------
解释完毕,请问:
A a = new A();
然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !


不知道这样可行不 

修改一下构造方法
A a = new A("a");
//参数传递命名的对象名字,然后类里面定义一个变量 存储变量名 再重写toString(),返回这个变量值

------解决方案--------------------
同时一个对象可能有多个引用名,
比如
Student stu = new Student();
Student stu2 = stu;

getObjName(stu); // should return "stu"
getObjName(stu2); // should return "stu2"

那么你的方法到底返回的是stu 还是 stu2呢,所以你想写这个方法本身就是有待商榷的
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

楼主这个需求相当于是想要在方法里面获取实参的名字啊。这个你在这个方法体里面是做不到的。不知道楼主为何有这样的需求


1、我这里只想获取A a = new A();中对象名"a" , 可以不考虑我上面的代码,反正获取就好。求教

2、我的业务里,有一个getDeclaredField(String name),我这里要传的name就是一个对象的对象名,不是类名
---------------------
解释完毕,请问:
A a = new A();
然后a是对象,其对象名就是"a",我想获取"a",如何获得呢 ?求教 !

业务里的getDeclaredField(String name)这个是Class的获取类中字段方法还是你自己写的方法啊


这个是调用Class信息的!

楼主既然要获取Class信息干嘛要去获取方法内部的局部变量呢?
------解决方案--------------------
引用:
Quote: 引用:

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


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