如何提交任务,它实现的子接口Callable<T>到ExecutorService?
我有一个Callable<T>定义为的子接口:
public interface CtiGwTask<T>
extends Callable {
...
}
Run Code Online (Sandbox Code Playgroud)
它只是定义了一些静态常量,但没有添加任何方法.
然后我有以下方法,其中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);
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这提供了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
Run Code Online (Sandbox Code Playgroud)
如果我将submit呼叫更改为
Future<CtiGwTaskResult<Integer>> result =
execService.submit( (Callable<CtiGwTaskResult<Integer>>) task);
Run Code Online (Sandbox Code Playgroud)
然后一切似乎都有效但现在我得到一个未经检查的投射警告.
...\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>>
Run Code Online (Sandbox Code Playgroud)
那么我错过了什么?不应该submit()适用于Callable的子类的实例?
您正在使用原始 Callable类型.
更改:
public interface CtiGwTask<T> extends Callable
Run Code Online (Sandbox Code Playgroud)
对此:
public interface CtiGwTask<T> extends Callable<T>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |