私は2つのクラス間でデータを渡すことに取り組んでいます。ClassOne では、GUI からのユーザー入力に基づいて HashSet を作成し、参照によって ClassTwo に渡します。
問題は、メソッドが実行されるまでに変数が空であることですが、コンストラクターでは空ではありません。以下は、私がやっていることの簡略化されたバージョンです。
クラスワン
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);
}
私が間違っていることについての考え?
=======
編集: 明確にするために、変数拡張は ClassOne から ClassTwo のコンストラクターを介して ClassTwo に渡されます。コンストラクターでは、値を ClassTwo のプロパティに割り当てています。これもextensionsという名前です。ClassTwo のコンストラクターでは、拡張機能の値を "[foo, bar, bat]" の結果として出力できます。しかし、ClassTwo の run() メソッドで値を出力すると、HashSet は空になり、"[]" が出力されます。
私の質問は、ClassTwo の「拡張機能」プロパティがメソッドでは空であるのに、コンストラクターでは空である理由は何ですか?