java 中怎么获得对象引用的名称?

RT
比如有一对象 Object instance = new Object();
怎么获得该对象引用名的字符串 “instance” ?
注意不是获得 “Object” 而是 “instance”。

很简单哟,但首先明确一点,java并没有提供方法可以直接返回引用名称的,我们只能自己实现,方法如下:
1、类中定义一个私有String类型的 instanceName 字段,并写get方法;
2、在构造方法中使用有参构造为其赋值;
3、new对象时传入引用名称;

3、使用的地方直接调用get方法即可返回改引用名称;
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-06-10
获得其所有引用变量的名字是不可能的,也没有实际意义,正如你现在无法确切说出有多少部手机“引用”(存储)了你的手机号码一样。注意,我们使用的是对象,而不是引用此对象的名字,事实上,在动态代理之中,我们从头到尾根本不需要知道代理类的名字,因为它是系统自动生成的。追问

怎么没有实际意义。比如将人视作类,zhangsan为的类引用名,我有时需要获得张三这个名字。
就像动态代理中,我想知道代理是谁一样。
虽然可以将zhangsan作为类的一个属性来完成这样的需要,但这样多占用的空间。
Person zhangsan = new Person();

原谅我比较偏执。。。真的没法办到么?

追答

根据面向对象的良好封装原则,名字应该作为属性(Field)设置,必要时还要私有化(private修饰),如果你是为了节省内存而将类的引用名与类相关联的话,那么你真的是误入歧途了。
一般的,我们在编程中会使用单例模式(JavaEE规范推荐,一般情况下,不保存客户端状态的对象都应设为单例)和代理模式(著名的ORM框架Hibernate的延迟加载功能就是代理模式的应用)等等减少对内存的消耗;池的概念也应用的很广泛,例如线程池、常亮池、数据库连接池等,在对象被反复并发访问的环境下,也很实用。还有很多,这里就不再一一列举了。
最后,在实际开发中,尤其是企业级应用,我们说,方便后期的维护与拓展的重要程度,是远远超过对内存的节约的,所以你会发现所有的框架和设计模式都不会拒绝反射。
这仅仅是2019的一点小感悟,仅供参考,谢谢。

本回答被提问者采纳
第2个回答  2021-09-08

在使用python时,和你有类似的想法。我用for循环遍历了实例对象名称列表,for语句中,加入instanceName = item。在类中,直接调用instanceName即可。

相似回答