2015-05-17 4 views
1

Так у меня есть конструктор, который выглядит так:Почему я получаю ClassCastException?

public Group(Entry<String, List<String>> rawGroup) { 
    permission=rawGroup.getKey(); 

    List<String> params = rawGroup.getValue(); 

    limits = Integer.parseInt(params.get(0)); 
    int a = Integer.parseInt(params.get(1)); 
    int b = Integer.parseInt(params.get(2)); 
    s1 = Math.min(a, b); 
    s2 = Math.max(a, b); 
} 

и "Список Params = rawGroup.getValue();" делает это:

java.lang.ClassException: java.lang.String не может быть приведен к java.util.List

Я не могу понять, почему это происходит, ПолучитьЗначение() не может возвращать строку, поскольку это не строка

UPDATE: запись является частью EntrySet, которая возвращает Map

UPDATE2: так вот код, который использует этот конструктор -

Map<String, List<String>> rawGroups = (Map) holder.config.getConfigurationSection(HEADING).getValues(true); 
    for (Entry<String, List<String>> rawGroup : rawGroups.entrySet()) { 
     groups.add(new Group(rawGroup)); 
    } 
+0

Что такое 'Entry'? Что возвращает 'getValue'? – CKing

+0

Невозможно помочь вам, не зная, что такое класс 'Entry' и как работает его функция getValue. 'Entry' не является стандартным классом или интерфейсом JDK или JEE, поэтому ... –

+0

@ T.J.Crowder Существует, конечно,« Map.Entry », который является стандартным классом JDK. Но мы не знаем, что означает OP с «Entry». – Jesper

ответ

2

Ключом линия здесь:

Map<String, List<String>> rawGroups = (Map) holder.config.getConfigurationSection(HEADING).getValues(true); 

Вы предположили, что то, что holder.config.getConfigurationSection(HEADING).getValues(true) возвращает это Map<String, List<String>>, и сказал компилятор, чтобы сделать это предположение, а также. Ясно, что это не так, потому что, когда вы пытаетесь использовать его таким образом, он терпит неудачу.

Вам нужно выяснить, что должно быть holder.config.getConfigurationSection(HEADING).getValues(true)действительно возвращение, и использование этого.

Вот простая демонстрация того же основной концепции (live copy):

public static void main (String[] args) 
{ 
    Map<String, List<String>> m = (Map)getMap(); 
    try { 
     System.out.println(m.get("entry").get(0)); // Fails here 
    } 
    catch (Exception e) { 
     System.out.println("Failed: " + e.getMessage()); 
     e.printStackTrace(System.out); 
    } 
} 
static Object getMap() { 
    Map m = new HashMap(); 
    List l = new LinkedList(); 
    l.add(42); 
    m.put("entry", l); 
    return m; 
} 
+0

Возможно, если Карта заполнена кодом, реализованным OP, им необходимо проверить, правильно ли они заполняют его. – Radiodef

+0

так что объект, который возвращает owner.config.getConfigurationSection (HEADING) .getValues ​​(true) is java.util.LinkedHashMap – XsergeiX

+0

@XsergeiX: Конечно, но 'LinkedHashMap' из ** what **? –

Смежные вопросы