я следующий кодКак удалить предупреждение "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>)
В чем заключаются ограничения на 'T'? – PeterK
Поскольку вы не знаете, какой тип 'Parcelable' распространяется, и вы скорее предполагаете, что он расширяет' T', вы должны убедиться, что каждый 'Parcelable' расширяет' T', чтобы стереть предупреждение. – Smutje
Какая ошибка компиляции вы получаете? – vikingsteve