2016-12-22 1 views
1

Я пытаюсь создать свой первый список, и я застрял на ошибке.не найден список символовModel.addElement

Вот шаблон я использую для модели списка:

private ListModel getListModel() { 

    String[] arrayOfStrings = new String[3]; 
    arrayOfStrings[0] = "one"; 
    arrayOfStrings[1] = "two"; 
    arrayOfStrings[2] = "three"; 

    ListModel listModel = new DefaultListModel(); 

    for (int i=0;i<arrayOfStrings.length;i++) { 
     listModel.addElement(arrayOfStrings[i]);    
    } 
}  

Ошибка:

error: cannot find symbol 
      listModel.addElement(arrayOfStrings[i]);    

symbol: method addElement(String) 

    location: variable listModel of type ListModel 

Я еще новичок в использовании интерфейс, а также списки. Я загрузил пример кода для создания списка, и их код был очень похож. Что мне не хватает? Я импортировал все, что импортировал код примера.

+0

addElement() - метод DefaultListModel, который отсутствует в интерфейсе ListModel. Таким образом, чтобы иметь возможность использовать его, ваша переменная должна быть объявлена ​​с типом DefaultListModel, а не с ListModel. Кроме того, не используйте необработанные типы: http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it. Используйте DefaultListModel . –

ответ

6

Если у вас есть сомнения, перейдите к API, так как он покажет все. В этой ситуации API покажет вам, что интерфейс ListModel<E> не имеет метода addElement(...). Вам придется объявить переменную как тип DefaultListModel<E>, так как это реализация, которая имеет этот метод.

Ссылки:

Сказав это, ваш метод все еще может возвращать тип ListModel интерфейса ... например,

// method declared to return the interface, ListModel 
private ListModel<String> getListModel() { 
    String[] arrayOfStrings = {"one", "two", "three"}; 

    // make sure to use generic types 
    DefaultListModel<String> listModel = new DefaultListModel<>(); 
    for (String txt : arrayOfStrings) { 
     listModel.addElement(txt); 
    } 
    return listModel; // don't forget to return a result 
} 
+0

Спасибо, я должен был внимательно прочитать код! –

5

Функция addElement(...) заявлено в DefaultListModel, но не в ListModel, поэтому его можно вызвать только для объекта, объявленного как DefaultListModel.

Используйте код DefaultListModel listModel = new DefaultListModel();, чтобы исправить ваш код.