1

executor サービスを使用して、並列実行用の複数の呼び出し可能なスレッドを生成しています。callable を実装するクラスの call メソッド (オーバーライド) で、特定のデータをチェックします。データが存在する場合はデータを返し、存在しない場合は null を返します。コードを実行すると、NullPointerException. call メソッドから null を返すことはできますか?

基本的にこの構文の:

public string call ()
{
if (data)
return data;
else
return null;
}

この種の何か。

4

1 に答える 1

1

はい、null を返すことができます。以下は正常に動作しているサンプル コードです。おそらく call メソッドでは、作成されていないオブジェクトにアクセスしていたでしょう。

import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;


public class Test {
    public static void main(String[] args) throws Exception {
        ExecutorService executorService1 = Executors.newFixedThreadPool(4);     
        Future f2 =executorService1.submit(new callable());
        System.out.println("f2 " + f2.get());       
        executorService1.shutdown();
    }

}


class callable implements Callable<String> {
    public String call() {       
        if(1==1)
           return null;
        return Thread.currentThread().getName();
    }
}
于 2013-09-19T13:13:50.120 に答える