Как убрать предупреждение "unchecked" из моего метода?
У меня есть следующий код
private static class ParcelableParser<T> {
private ArrayList<T> parse(List<Parcelable> parcelables) {
ArrayList<T> parsedData = new ArrayList<T>();
for(Parcelable parcelable : parcelables) {
parsedData.add((T) parcelable);
}
return parsedData;
}
}
Это называется следующим
ParcelableParser<SomeClass> cellParser = new ParcelableParser<SomeClass>();
cellParser.parse(bundle.getParcelableArrayList("some String"));
Дает предупреждение Type safety: Unchecked cast from Parcelable to T
,
Независимо от того, что я делаю, у меня всегда есть какая-то неприятная ошибка компиляции. Я читал о правиле PECS, но я не могу применить его здесь.
пример решения (не компилируется)
private static class ParcelableParser<T extends Parcelable> {
private ArrayList<T> parse(List<T> parcelables) {
ArrayList<T> parsedData = new ArrayList<T>();
for(T parcelable : parcelables) {
parsedData.add((T) parcelable);
}
return parsedData;
}
}
Используя это как
return new ParcelableParser<SomeClass>()
.parse (bundle.getParcelableArrayList ("SomeString"));
prodces
The method parse(List<SomeClass>) in the type MyClass.ParcelableParser<SomeClass> is not applicable for the arguments (ArrayList<Parcelable>)
1 ответ
Решение
Как вы знаете, parcelable имеет тип T, почему бы вам не использовать T вместо этого. Попробуй это:
public static class ParcelableParser<T> {
private ArrayList<T> parse(List<T> parcelables) {
ArrayList<T> parsedData = new ArrayList<T>();
for(T parcelable : parcelables) {
parsedData.add(parcelable);
}
return parsedData;
}
}