如何在Java构造方法中获取新对象名称并添加到数组?
解决Java构造方法中获取对象变量名并管理的问题
嘿,这个问题其实戳中了Java里一个很常见的认知误区——对象本身根本不知道自己被哪个变量引用!你之前尝试的toString()、getClass()这些方法,只能拿到类的信息或者对象的哈希标识,拿不到你定义的变量名(比如exelement),因为变量名只是栈上的一个“别名”,堆里的对象完全没这个概念。
而且你之前想把字符串"exelement"存到数组里的思路也绕远了——你最终要的是操作对象的status字段,直接存对象引用才是最直接的方式。下面给你两种实用的解决方案:
方案1:直接存储对象引用(最推荐)
既然核心需求是遍历更新所有element对象,那完全不需要纠结变量名,直接把创建的element实例加入集合,后续遍历集合操作对象就行:
public class TestExample { // 用ArrayList比数组更灵活,支持动态添加 private List<element> elementList = new ArrayList<>(); public class element { public int status; public element() { // 构造时直接把当前对象加入集合 elementList.add(this); } } public void update() { // 遍历所有element对象,更新status for (element elem : elementList) { elem.status = 1; // 如果需要针对特定对象做额外操作,可以给element加标识字段(看方案2) } } }
使用的时候非常简单:
TestExample example = new TestExample(); // 不管你给变量起什么名字,创建时都会自动加入集合 TestExample.element exelement = example.new element(); TestExample.element anotherElem = example.new element(); // 调用update直接更新所有对象的status example.update();
方案2:给对象手动添加标识(需要区分特定对象时用)
如果你的业务逻辑需要针对特定名字的对象做操作,可以给element类加一个identifier字段,构造时手动传入变量名(相当于给对象打个标签):
public class TestExample { private List<element> elementList = new ArrayList<>(); public class element { private String identifier; // 用于标识对象的自定义名称 public int status; public element(String identifier) { this.identifier = identifier; elementList.add(this); } public String getIdentifier() { return identifier; } } public void update() { for (element elem : elementList) { // 给所有对象设置status=1 elem.status = 1; // 针对名为"exelement"的对象做额外操作 if ("exelement".equals(elem.getIdentifier())) { // do something special } } } }
使用时传入变量名作为标识:
TestExample example = new TestExample(); TestExample.element exelement = example.new element("exelement"); example.update();
为什么你的尝试没成功?
再补充解释下你之前遇到的问题:
this.toString()默认返回类名@哈希码,这是对象的唯一标识,但不是你定义的变量名;getClass().getName()只能拿到类的全限定名(比如TestExample$element),也和变量名无关;- 把字符串
"exelement"存到数组里,后续你没法通过这个字符串直接找到对应的对象,自然也没法设置status——必须存对象引用才行。
总结一下:Java里不存在“获取对象变量名”的通用方法,但你完全可以通过存储对象引用或者手动添加标识字段的方式,实现遍历更新的需求,这也是Java里管理对象集合的常规做法。
内容的提问来源于stack exchange,提问作者Missingno50
相关产品推荐
相关产品推荐

