有没有一种方法可以在构造函数中查找对象的名称?

时间:2020-10-30 06:36:42

标签: java processing

我有一个非常简单的Java相关问题。我需要以某种方式获取构造函数中的新对象名称,以将其添加到数组中。如果有可能,我将如何实现?

为了帮助可视化,这是我需要做的。

TestExample example = new examplemain();
TestExample.element exelement = example.new element();

至此,随着新按钮对象的创建,我有了一个构造函数。 examplemain类具有一个称为update的功能。我需要此更新来遍历每个对象,以更新与exe关联的绘图元素。最明显的方法是将其添加到数组,然后在调用example.update()时,只需运行一个数组即可更新所有内容。像这样的东西会达到我想要的效果,但仅仅是为了发挥作用,这是不好的。

element() {
TestExample.array[0]="exelement"
}

我发现了诸如this.toString(),getName()或getClass()之类的东西,但是我找不到任何有意义的方式将其应用到所需的方法中。要重申,我需要能够做类似TestExample.array[0].status=1的事情。

谢谢!

2 个答案:

答案 0 :(得分:2)

很难理解您在说什么,因为您的示例显然不符合您在说什么。 (例如TestExample.array[0] = "exelement"仅保存一个字符串,而您不能将其解析为变量。)

事实上,我很确定变量也都是红色鲱鱼。 1 。您实际需要的是这样的东西:

// Simplistic incorrect version ...
public class Element {
    private static List<Element> allElements = new ArrayList<>();

    public Element() {
        ...
        allElements.add(this);
    }

    public void update() { ... } 

    public static void updateAll() {
        for (Element e: allElements) {
            e.update();
        }
    }
}

上面有两个问题。首先,除非您有可靠的方法来清除不再需要的任何元素,或者使用引用类型以使GC可以断开链接,否则使用static可能会导致内存泄漏。第二个问题是您的示例显然使用了inner类。

因此,使用内部类,它可能看起来像这样:

public class Outer {
    private List<Element> allElements = new ArrayList<>();

    public class Element {
        
        public Element() {
            ...
            allElements.add(this);
        }

        public void update() { ... } 
    }

    public void updateAll() {
        for (Element e: allElements) {
            e.update();
        }
    }
}

现在...,如果Outer实例变得不可访问,那么任何只能通过Element才能访问的allElements对象也是如此。


1-但是,如果变量很关键,那么恐怕您不走运。 Java没有提供获取变量地址或使用反射查找局部变量的方法。这就是@Louis Wasserman在his answer中说的话。

答案 1 :(得分:0)

不幸的是,这绝对是不可能的。甚至反射也无法找到仍在初始化过程中的字段名称。

例如,您必须将名称传递给构造函数。