-1

我有以下代码

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"));

产品

The method parse(List<SomeClass>) in the type MyClass.ParcelableParser<SomeClass> is not applicable for the arguments (ArrayList<Parcelable>)

4

1 回答 1

1

As you know parcelable is of type T why don't you use T instead. Try this:

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;
    }
}
于 2014-10-17T12:11:32.857 回答