पर कॉल करने योग्य
Callable<T>
के
ExecutorService
पर उपनिर्देशन लागू करने वाला कार्य कैसे सबमिट करें?
public interface CtiGwTask<T>
extends Callable {
...
}
यह सिर्फ कुछ स्थिर स्थिरांक को परिभाषित करता है, लेकिन कोई तरीकों को जोड़ता है:
मैं Callable<T>
के subinterface के रूप में परिभाषित किया है।
तब मेरे पास निम्न विधि है जहां 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
मैं
Future<CtiGwTaskResult<Integer>> result =
execService.submit((Callable<CtiGwTaskResult<Integer>>) task);
को submit
कॉल को बदलते हैं तो सब कुछ काम करने के लिए लगता है, लेकिन अब मैं एक अनियंत्रित डाली चेतावनी मिलती है।
...\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()
कॉल करने योग्य के उप-वर्ग के उदाहरण पर लागू नहीं होना चाहिए?
यदि यह 'भविष्य> परिणाम = execService.submit ((प्रतिदेय >) कार्य);' आप देता है एक 'cast' चेतावनी, क्यों' भविष्य > परिणाम = (भविष्य >) execService.submit ((प्रतिदेय >) कार्य) की कोशिश नहीं करते हैं, '? यदि आप इस तरह कुछ करने की कोशिश करते हैं तो आप पोस्ट भी कर सकते हैं। –
DaGLiMiOuX
इतनी सारी चीज़ें आज़माएं जिन्हें मैं वास्तव में याद नहीं कर सकता लेकिन मैंने अभी परीक्षण किया और जैसा कि मुझे संदेह है कि कुछ भी नहीं बदला है। चेतावनी '(कॉल करने योग्य>) कार्य' कास्ट को संदर्भित करती है लेकिन एक बार लागू प्रकार और मेथोस आमंत्रण लागू नहीं होता है "अनचेक"। –
AndRAM