のサブインターフェースを実装するタスクを に送信する方法Callable<T>
はExecutorService
?
Callable<T>
次のように定義されたサブインターフェイスがあります。
public interface CtiGwTask<T>
extends Callable {
...
}
いくつかの静的定数を定義するだけで、メソッドは追加しません。
次に、インスタンスである次のメソッドがexecService
ありFixedThreadPool
ます。
@Override
public CtiGwTaskResult<Integer> postCtiTask(CtiGwTask<CtiGwTaskResult<Integer>> task) {
Future<CtiGwTaskResult<Integer>> result =
execService.submit(task);
try {
return result.get();
} catch (InterruptedException | ExecutionException ex) {
LOGGER.log(Level.FINEST,
"Could not complete CTIGwTask", ex);
return new CtiGwTaskResult<>(
CtiGwResultConstants.CTIGW_SERVER_SHUTTINGDOWN_ERROR,
Boolean.FALSE,
"Cannot complete task: CTIGateway server is shutting down.",
ex);
}
}
残念ながら、これは 2 つのチェックされていない変換と 1 つのチェックされていないメソッド呼び出しの警告を出しています。
...\CtiGwWorkerImpl.java:151: warning: [unchecked] unchecked conversion
execService.submit(task);
required: Callable<T>
found: CtiGwTask<CtiGwTaskResult<Integer>>
where T is a type-variable:
T extends Object declared in method <T>submit(Callable<T>)
...\CtiGwWorkerImpl.java:151: warning: [unchecked] unchecked method invocation: method submit in interface ExecutorService is applied to given types
execService.submit(task);
required: Callable<T>
found: CtiGwTask<CtiGwTaskResult<Integer>>
where T is a type-variable:
T extends Object declared in method <T>submit(Callable<T>)
...\CtiGwWorkerImpl.java:151: warning: [unchecked] unchecked conversion
execService.submit(task);
required: Future<CtiGwTaskResult<Integer>>
found: Future
submit
呼び出しを変更すると
Future<CtiGwTaskResult<Integer>> result =
execService.submit( (Callable<CtiGwTaskResult<Integer>>) task);
その後、すべてが機能しているように見えますが、チェックされていないキャストの警告が表示されます。
...\src\com\dafquest\ctigw\cucm\CtiGwWorkerImpl.java:151: warning: [unchecked] unchecked cast
execService.submit((Callable<CtiGwTaskResult<Integer>>) task);
required: Callable<CtiGwTaskResult<Integer>>
found: CtiGwTask<CtiGwTaskResult<Integer>>
それで、私は何が欠けていますか?submit()
Callable のサブクラスのインスタンスに適用すべきではありませんか?