-1

アプリケーションでSpringでJ2EEを使用しています。アプリケーションに次のコードがあります。

public class StreamThread extends Thread implements Constants{
{
    private Set<String> allsymbolSet= new HashSet<String>();
    boolean switchTab(String tab) throws Exception 
    {
        if (somecondition) {
            SymbolsSet = allsymbolSet;
        }  
    }
}

質問はおかしいかもしれませんが、私はまだ運を試しています。がどのように設定されているかわかりませんallsymbolSet

allsymbolSet値が初期化されている場所を知るにはどうすればよいですか? これallsymbolSetは静的でも定数でもありません。ユーザーごとに異なります。

そのようなSpringの設定はありますか?

4

2 に答える 2

1

あなたの質問は正直なところ非常に不明確です。私はあなたが何を尋ねようとしているのかを推測しようとします

public class Foo {
{
    private Set<String> bar = new HashSet<String>();   // 1

    public void doSomething() {
        assert bar != null;  //2
    }
}

1 行目では、明らかに bar が初期化されています ( を使用new HashSet<>())。行 2 の assert が失敗していないことを考えると、それは行 1 が何らかの形で事前に実行されていることを意味します。それはあなたが尋ねようとしていることですか?:

ライン 1 の初期化はいつ実行されますか?

そうである場合は、単純に次のように扱うことができます。フィールドの初期化と初期化ブロックのロジックは、スーパークラスコンストラクターの呼び出し後、すべてのコンストラクターの先頭に自動的に「コピー」されます。

これを例として使用します。

public class Foo {
{
    private Set<String> bar = new HashSet<String>();   // 1

    {   // initializer
        bar.add("BAR");
    }

    public Foo() {
       someInitLogic();
    }

    public void doSomething() {
        assert bar != null;  //2
    }
}

コンパイラは、次のようなコードを生成します。

public class Foo {
{
    private Set<String> bar;


    public Foo() {
        super();      // auto-generated invocation of superclass ctor
        bar = new HashSet<String>();   // field initialization and 
        bar.add("BAR");                // initializers

        someInitLogic();
    }

    public void doSomething() {
        assert bar != null;  //2
    }
}
于 2013-05-30T01:49:37.750 に答える