【发布时间】:2013-08-03 13:11:03
【问题描述】:
我正在处理两个类之间的数据传递。在 ClassOne 中,我基于来自 GUI 的用户输入构建了一个 HashSet,然后我想通过引用传递给 ClassTwo。
问题是当我的方法运行时变量是空的,但在构造函数中不是。下面是我正在做的简化版本。
ClassOne
public class ClassOne
{
HashSet<String> extensions;
// run this when the button is clicked
class startListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
// run the method to populate the hashset
parseExt();
// create a new class passing HashSet
classTwo = new classTwo(extensions);
}
}
// populates HashSet
public void parseExt()
{
extensions = new HashSet<String>();
extensions.add("foo");
extensions.add("bar");
extensions.add("bat");
}
}
二类
public class ClassTwo implements Runnable
{
HashSet<String> extensions;
public ChgOwner(HashSet<String> extensions)
{
this.extensions = extensions;
// prints [foo, bar, bat]
System.out.println(this.extensions);
}
public void run()
{
// prints []
System.out.println(this.extensions);
}
想到我做错了什么?
=======
编辑:为了尝试澄清,变量 extensions 正在通过 ClassTwo 的构造函数从 ClassOne 传递到 ClassTwo。在构造函数中,我将值分配给 ClassTwo 中的属性,也称为 extensions。在 ClassTwo 的构造函数中,我可以打印结果为“[foo, bar, bat]”的扩展值。但是在 ClassTwo 中打印 run() 方法中的值时,HashSet 为空并输出“[]”。
我的问题是为什么ClassTwo的“扩展”属性在方法中是空的,而在构造函数中却没有?
【问题讨论】:
-
也许是我,但我完全不明白你的问题,贴出的代码对我没有帮助。请为我们进一步澄清您的问题。考虑创建并发布sscce。
-
@HovercraftFullOfEels 不只是你 m8
-
将hashset传给classtwo后,classone是否再次修改(可能调用
clear())? -
@jtahlborn 删除的答案可能已经确定了您的问题。再次,请澄清。
-
@HovercraftFullOfEels 刚刚更新以尝试澄清。
标签: java constructor hashset