У меня есть два AsyncTasks
в моей деятельности, каждый из которых использует разные типы аргументов:
private class TaskA extends AsyncTask<Void, byte[], Boolean> { ... }
private class TaskB extends AsyncTask<byte[], byte[], Boolean>
Оба подкласса реализуют метод public boolean SendDataToNetwork(final byte[] cmd)
, который можно вызывать из потока графического интерфейса.
Я бы хотел, чтобы в моей деятельности была ссылка, указывающая на TaskA
или TaskB
в зависимости от того, какие аргументы передаются в мою деятельность с намерением.
То, что я пробовал до сих пор, так это:
private AsyncTask<?, ?, ?> myTask = null;
и
switch(mode) {
case 1:
myTask = new TaskA();
break;
case 0:
myTask = new TaskB();
break;
}
Однако, когда я пытаюсь выполнить myTask
позже в коде с
myTask.execute();
, это приводит к ошибке компиляции: Type safety: A generic array of capture#7-of ? is created for a varargs parameter
Как правильно привести myTask
к TaskA
или TaskB
в соответствии с оператором переключения?
Обновление:
Инициализация myTask
с помощью:
private AsyncTask myTask = null;
приводит к одному предупреждению:
myTask= new TaskA();
myTask.execute();
The method execute(Object...) belongs to the raw type AsyncTask. References to generic type AsyncTask<Params,Progress,Result> should be parameterized
Если я пытаюсь использовать метод SendDataToNetwork
, я получаю ошибку сейчас:
The method SendDataToNetwork(byte[]) is undefined for the type AsyncTask
Похоже, что объект myTask
никогда не приводится к типу TaskA
или TaskB
?