я нашел здесь на 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, когда я пытаюсь выполнить процедуру входа для одного пользователя?
вы можете поместить код ccompelte здесь т.е. zeeOnline.ajava строки 72.Also, в вашем назначении конструктора локальной переменной из переменной экземпляра происходит, оно должно быть вице- наоборот. this.gebruikersnaam = gebruikersnaam; –
Довольно ясно: 'java.lang.String не может быть передан в my.venster.Gebruiker' в строке 72. Несмотря на предполагаемую« безопасность »дженериков, ваш ArrayList содержит строки. (И все ваши назначения в конструкторе назад). –