Мне нужно передать значение Map<String, String>
на Android-плеер AsyncTask. К сожалению AsyncTask
обратный вызов doInBackground(Params... params)
и execute(Params... params)
метод принимает varargs. Мы знаем, что varargs превращается в массивы, и мы не можем создавать массивы родовых типов. Как передать свой параметр execute
?Передайте общие параметры типа syncTask
-1
A
ответ
1
Generics просто в основном там, чтобы предупредить вас о том, как делать плохие вещи во время компиляции. Чтобы получить дженериков переменные аргументы происходит, вы можете использовать обертку, как показано ниже:
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class VarArgsGeneric {
public static void main(String... args) {
StringMapWrapper mw1 = createMap("1", "one");
StringMapWrapper mw2 = createMap("2", "two");
StringMapWrapper mw3 = createMap("3", "three");
VarArg<StringMapWrapper> test = new VarArg<StringMapWrapper>();
test.add(mw1, mw2, mw3);
test.add((StringMapWrapper)null);
StringMapWrapper[] mws = test.getParams(StringMapWrapper.class);
System.out.println(Arrays.toString(mws));
}
public static StringMapWrapper createMap(String key, String value) {
StringMapWrapper mwrapped = new StringMapWrapper(new HashMap<String, String>());
mwrapped.getMap().put(key, value);
return mwrapped;
}
static class VarArg<Param> {
private final List<Param> allParams = new ArrayList<Param>();
// Heap pollution: http://stackoverflow.com/q/12462079/3080094
@SafeVarargs
public final void add(Param... params) {
for (Param p : params) {
allParams.add(p);
}
}
@SuppressWarnings("unchecked")
public <T> T[] getParams(Class<T> type) {
// Copied from http://stackoverflow.com/a/530289/3080094
final T[] pa = (T[]) Array.newInstance(type, allParams.size());
for (int i = 0; i < pa.length; i ++) {
pa[i] = type.cast(allParams.get(i));
}
return pa;
}
}
static class StringMapWrapper {
private final Map<String, String> m;
public StringMapWrapper(Map<String, String> m) {
this.m = m;
}
public Map<String, String> getMap() {
return m;
}
@Override
public String toString() {
return m.toString();
}
}
}
который печатает: [{1=one}, {2=two}, {3=three}, null]
Смежные вопросы
- 1. Как указать общие параметры типа метода частично
- 2. Spark AccumulatorParam Общие параметры
- 3. (Двухместный) Рекурсивные общие параметры
- 4. Вложенные Общие Тип Параметры Параметры
- 5. Передайте общие методы внешним методам, которые также используют общие методы.
- 6. Передайте дополнительные параметры для связывания?
- 7. Общие параметры шаблона django
- 8. Java Общие формальные параметры
- 9. Swift 3 Общие параметры
- 10. C# общие параметры
- 11. Избыточные общие параметры
- 12. Swift закрывающие общие параметры
- 13. Обнаружить общие параметры MethodBase
- 14. Verilog: общие параметры
- 15. Общие параметры VARIADIC
- 16. CodeType получить общие параметры
- 17. Зависимые общие параметры
- 18. C# Общие параметры данных
- 19. общие параметры в iphone
- 20. Java получить фактические общие параметры
- 21. неявные параметры и общие типы
- 22. Общие параметры метода в Голанге
- 23. Как использовать общие интерфейсы, используя контравариантные параметры для базового типа?
- 24. В Scala можно использовать общие параметры типа с определениями * function *?
- 25. Общие параметры типа для преобразования в параллельной коллекции
- 26. (Re), используя общие параметры типа ограничивающего без объявления их
- 27. Как заставить Java принять того же типа общие параметры
- 28. Класс java.util.Map имеет общие параметры типа, пожалуйста, используйте GenericTypeIndicator вместо
- 29. Как получить «базовый» тип от типа, который содержит общие параметры?
- 30. Класс java.util.List имеет общие параметры типа, пожалуйста, используйте GenericTypeIndicator вместо
Вы хотите сказать, что вы уже пробовали 'Map. ..'? –
Да, но исключены исключения. –
Какие исключения? –