Как убрать предупреждение "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;
    }
}
Другие вопросы по тегам