Re[3]: Добавление обьектов в массив
От: Blazkowicz Россия  
Дата: 25.02.10 16:37
Оценка:
Здравствуйте, PorcoRosso, Вы писали:

PR>
PR>public class Skin {
PR>    public String Name;

PR>    private ArrayList<Section> Sections = new ArrayList<Section>(); // Та самая коллекция объектов, которую надо заполнить, тип - стандартный java.util.ArrayList

PR>    public void Parse(XmlPullParser parser) throws Exception {
PR>        this.Name = ParserHelper.GetString(parser, "Name", "Unnamed skin");
PR>        ParserHelper.ParseCollections(parser, "Sections", this.Sections); // пытаемся заполнить коллекцию
PR>    }
PR>}

PR>public final class ParserHelper {
PR>    private static void ParseCollection(XmlPullParser parser, String name, ArrayList<? extends Object> coll) throws Exception {
PR>        for (НЕВАЖНО) {
PR>                Object item = ParserHelper.ParseObject(parser, name); // В общем откуда-то получили нужный объект, это Section в данном случае
PR>                coll.add(item); // а вот эта строка не компилируется
PR>        }
PR>    }
PR>}
PR>


Ну, всё правильно. Смысл в чем. Если бы можно было добавить Object в коллекцию, то ты бы в ArrayList<Section> мог бы засунуть любой тип. Это "типа" не безопасно.

Решение должно быть где-то таким. Придется либо ParseObject() делать типобезопасным. Либо тупо кастить в этом методе к T.
public final class ParserHelper {
    private static <T> void ParseCollection(XmlPullParser parser, String name, ArrayList<T> coll, Class collectionType) throws Exception {
        for (НЕВАЖНО) {
                T item = ParserHelper.ParseObject(parser, name, collectionType); // В общем откуда-то получили нужный объект, это Section в данном случае
                coll.add(item); // а вот эта строка не компилируется
        }
    }
}


И бросайте свои .NETовские привычки называть методы с большой буквы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.