У меня есть простой класс, который использует generics.Generics: 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 [] не может быть приведен к модель.Таблица []
Я делаю что-то вроде этого:
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() метод:
Result res = worker.doInBackground(params);
Я использовал отладчик, чтобы проверить [] Params поле параметра (в ResponseWorkerRunnable) и его набор на объект [1] {Таблица @ 4237c0e0}
Таким образом, ее массив объекта, но ResponseWorker.doInBackground ожидает массив таблицы классов.
Как правильно его направить?
Result res = worker.doInBackground((Parameter[]) params);
Любая другая идея или подсказка, что может быть неправильным?
------ ОБНОВЛЕНИЕ -------
Я использую класс одноплодной под названием ResponseWorkerExecutor планировать ResponseWorkerRunnable (с ThreadPool) в
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