2013-03-21 3 views
3

В настоящее время я программирования на Bukkit плагин (Bukkit тип Minecraft-сервер;)), и там, у вас есть метод в классе с именем YamlConfiguration, который имеет следующий метод:Список <?> добавление и удаление элементов

public List<?> getList(String path) 

Моя проблема: я хотел бы добавить и/или удалить элементы из этого списка. Но когда я пытаюсь сделать это с помощью

YamlConfiguration config = YamlConfiguration.load("path/to/config.yml"); 
config.getList("a.path").add(new String("foo")); 

затмение бросает ошибку, потому что

Метод дополнения (захват # 2-в?) В списке типов < захвата # 2-в? > не применим к аргументам (String)

Я действительно не знаю, что делать. ^^ '

С уважением.

+2

Выяснить какой тип элементов в списке. Вы должны добавить элемент того же типа (который, очевидно, не является String). –

+2

Если у вас есть список неограниченного типа (''), вы не можете ничего добавить к нему, и вы можете получить от него любой тип объекта. Вам нужно связать тип. Попробуйте 'List '. –

+0

@StijnHaus Элементы - это строки. Я сохранил их как «Список » в этот файл и хотел бы вернуть их как «Список <Строка» не как «Список » ... (Pastebin post: [link] (http://pastebin.com/) N4JyqMSa)) – mezzodrinker

ответ

3

Вы действительно хотите загрузить свой товар с помощью getList? Там также есть getStringList(...).

Так может быть, вы могли бы попробовать:

config.getStringList("a.path").add("foo"); 
+2

'add (new String (" foo "))' -> 'add (" foo ")' –

+0

@BGR да, конечно :) Я просто менял свой код на 'add (new String()) ', а затем вспомнил что-то, что нужно написать внутри – mezzodrinker

+0

@BGR Спасибо за указание.Я отредактировал свой ответ. – GeneSys

0

? подстановочных символов, который представляет собой неизвестный тип, потому что вы не знаете тип list<?>, так что вы не можете добавить любой элемент в ней.

2

List<?> list может указывать на список любого типа, например List<String> или List<Integer> или любой другой. Это означает, что вы не знаете, что такое фактический список, поэтому вам разрешено добавлять только null в этот список. Подробнее в этом учебнике http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

0

Если вы уверены, что она возвращает список строки, вы можете бросить его:

((List<String>)config.getStringList("a.path")).add("foo"); 
+0

, если вы используете 'getStringList', вам не нужно использовать приведение к' List '... :) – mezzodrinker

0

Я думаю, что вы должны заменить <?> с <Object>, то вы можете добавить любой думать, как Integer, String и т.д. в список ...

удачи :)