0

私は以下のコードを持つクラスを持っています、

public class DocTransformer implements Callable<IndexableDocument> {

    WDoc document;
    public DocTransformer(Map<INDEXFIELD, Tokenizer> tknizerMap, WDoc doc) {
        this.document = doc;
    }

    public IndexableDocument call() throws TokenizerException {
        System.out.println("Inside doctrans: "+this.document.getId());

    }

}

IndexableDocument は以下のようになります。

public class IndexableDocument {

    WDoc doc;
    public IndexableDocument() {
        System.out.println("this is inside indexable document");
    }

    public void addField(INDEXFIELD field, TStream stream) {
        //TODO: Implement this method
    }

    public TokenStream getStream(INDEXFIELD key) {
        //TODO: Implement this method
        return null;
    }

    public String getDocumentIdentifier() {
        System.out.println(doc.getId);
    }

}

ランナー クラスは DocTransformer を呼び出します。WDoc はランナー クラスから呼び出され、そこからオブジェクトが DocTransformer に渡されるため、DocTransformer 内の WDoc にアクセスできます。しかし、IndexableDocument 内の WDoc オブジェクトにアクセスする必要があります。それを達成する方法は?私はスレッドに非常に慣れていないので、私の質問を言い換える必要があるかどうかを説明してください。

4

1 に答える 1

0

この WDOC のゲッターとセッターを作成してExchangerを使用できます。WDOC を final にすることを忘れないでください。

Exchanger<WDoc> exchanger = new Exchanger<WDoc>(); \\do it inside some Cover Thread(mb your main class)
currentWdoc = exchanger.exchange(doc); \\ inside getter

read のみに WDOC を使用する場合。getter と final フィールドを使用するだけです

于 2013-10-23T12:38:46.740 に答える