You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:17:47