2014-09-18 2 views
0

я нашел здесь на Stackoverflow то, что «ClassCastException» есть, но я не вижу, как решить эту проблему в моем случае:ClassCastException при сравнении двух строк

У меня есть класс «Gebruiker» (= голландски пользователь). Каждый объект Gebruiker/User имеет «String Gebruikersnaam (= имя пользователя)» и «String Password». «Логический тип» определяет, является ли пользователь администратором (true) или обычным пользователем (= false).

public class Gebruiker implements Serializable{ 

     private String gebruikersnaam; 
     private String wachtwoord; 
     private Boolean type; //0 = user 1=super user 

     public Gebruiker(String gebruikersnaam, String wachtwoord, Boolean type) { 
      gebruikersnaam = this.gebruikersnaam; 
      wachtwoord = this.wachtwoord; 
      type = this.type; 

     } 

Метод в этом классе возвращает имя пользователя как строку.

 /** 
     * @return the gebruikersnaam 
     */ 
     public String getGebruikersnaam() { 
      return gebruikersnaam; 
     } 

В имеют ArrayList<Gebuiker> gebruikers;, где я хранить все пользователи.

Оператор If в приведенном ниже коде сравнивает имя пользователя из заданного объекта «Gebruiker» с использованием моего метода "gebr.getGebruikersnaam()" с текстом в поле ввода пользователя «LogOnName». Поэтому я сравнить строку со строкой, но я получаю сообщение об ошибке там ...

for (Gebruiker gebr : gebruikers) { 
    //line 72 in the code: 
    if (gebr.getGebruikersnaam().equals(logOnName.getText())){ 
     //do something here 

     } 
    } 

Части из StackTrace генерируемой из-за ошибки я не могу решить:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to my.venster.Gebruiker 
    at my.venster.zeeOnline.logOnGebruiker(zeeOnline.java:72) 
    at my.venster.zeeOnline.logOnButtonActionPerformed(zeeOnline.java:910) 
    at my.venster.zeeOnline.access$300(zeeOnline.java:30) 
    at my.venster.zeeOnline$4.actionPerformed(zeeOnline.java:429) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 

Я понимаю, что Я могу получить ClassCastException, когда я пытаюсь применить один тип к другому типу, который несовместим с этим типом. т.е. целое число в строку, но здесь мне нужна строка из объекта User, которая также является строкой.

Почему я получаю это раздражающее ClassCastException, когда я пытаюсь выполнить процедуру входа для одного пользователя?

+0

вы можете поместить код ccompelte здесь т.е. zeeOnline.ajava строки 72.Also, в вашем назначении конструктора локальной переменной из переменной экземпляра происходит, оно должно быть вице- наоборот. this.gebruikersnaam = gebruikersnaam; –

+1

Довольно ясно: 'java.lang.String не может быть передан в my.venster.Gebruiker' в строке 72. Несмотря на предполагаемую« безопасность »дженериков, ваш ArrayList содержит строки. (И все ваши назначения в конструкторе назад). –

ответ

0

Распечатать logOnName.getText() и посмотреть, печатает ли он строку или объект. Вы должны выполнить задание так:

this.gebruikersnaam = gebruikersnaam; 
this.wachtwoord = wachtwoord; 
this.type = type; 
Смежные вопросы