0

私は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 の「拡張機能」プロパティがメソッドでは空であるのに、コンストラクターでは空である理由は何ですか?

4

2 に答える 2

2

ハッシュセットを classtwo に渡した後、classone がそれを再度変更していると思います (おそらく を呼び出しclear()ます)。

于 2013-08-03T13:43:21.167 に答える