我有一个非常简单的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
的事情。
谢谢!
答案 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)
不幸的是,这绝对是不可能的。甚至反射也无法找到仍在初始化过程中的字段名称。
例如,您必须将名称传递给构造函数。