我有一個簡單的類,使用泛型。泛型:ClassCastException:java.lang.Object []不能轉換爲
public class ResponseWorkerRunnable<Parameter, Result> implements Runnable {
private final ResponseWorker<Parameter, Result> worker;
/**
* The parameters for {@link ResponseWorker#doInBackground(Object...)}
*/
private final Parameter[] params;
public ResponseWorkerRunnable(ResponseWorker<Parameter, Result> worker,
Parameter... params) {
uiThreadHandler = new Handler(Looper.getMainLooper());
this.worker = worker;
this.params = params;
}
@Override
public void run() {
try {
Result res = worker.doInBackground(params);
postResultBack(res);
} catch (Exception e) {
postErrorBack(e);
}
}
}
和我ResponseWorker:
public interface ResponseWorker<Parameter, Result> {
public Result doInBackground(Parameter... param) throws Exception;
}
的問題是,我得到ClassCastException異常:
java.lang.ClassCastException:java.lang.Object繼承[]不能被轉換爲 model.Table []
我這樣做:
Table t = new Table();
ResponseWorker<Table, SuperTable> worker = ... ;
ResponseWorkerRunnable<Table, SuperTable> r = new ResponseWorkerRunnable<Table, SuperTable>(worker, t);
比起ResponseWorkerRunnable將被預定並在未來與此異常運行:
java.lang.ClassCastException:java.lang.Object繼承[]不能被轉換爲 model.Table []
在這條線在ResponseWorkerRunnable run()方法:
Result res = worker.doInBackground(params);
我已經使用調試器來檢查參數[] PARAMS字段(在ResponseWorkerRunnable)及其組到對象[1] {表@ 4237c0e0}
所以它的對象的陣列但ResponseWorker.doInBackground期望的數組類表。
如何正確投射?
Result res = worker.doInBackground((Parameter[]) params);
任何其他想法或暗示什麼可能是錯的?
------ UPDATE -------
我使用一個名爲ResponseWorkerExecutor一個單獨的類在我的代碼我安排ResponseWorkerRunnable(帶線程池)來
class ResponseWorkerExecutor {
public static <Parameter, Result> Future<?> submit(
ResponseWorker<Parameter, Result> responseWorker, Parameter ... params) {
return INSTANCE.executor
.submit(new ResponseWorkerRunnable<Parameter, Result>(
responseWorker, params));
}
}
所以做這樣的事情: 我做這樣的事情:
Table t = new Table();
// ResponseWorker implementation
ResponseWorker<Table, SuperTable> worker = ... ;
// Here is the problem with the args
ResponseWorkerExecutor.submit(worker, t);
你是否也有,當你編譯它警告? – newacct