在尝试更新ArrayList元素时遇到无法使用函数的问题。接收错误:
com.wep.Darbuotojas无法转换为com.wep.Programuotojas
我猜我尝试在某个地方将String转换为int或从int转换为String,但是现在看不到哪里。
Darbuotojas类:
package com.wep;
public class Darbuotojas {
protected String vardas;
protected String pavarde;
public String getVardas() {
return vardas;
}
public void setVardas(String vardas) {
this.vardas = vardas;
}
public String getPavarde() {
return pavarde;
}
public void setPavarde(String pavarde) {
this.pavarde = pavarde;
}
public int getAmzius() {
return amzius;
}
public void setAmzius(int amzius) {
this.amzius = amzius;
}
protected int amzius;
Darbuotojas() {}
public Darbuotojas(String vardas, String pavarde, int amzius) {
this.vardas = vardas;
this.pavarde = pavarde;
this.amzius = amzius;
}
}
Programuotojas类:
package com.wep;
public class Programuotojas extends Darbuotojas {
protected String programavimoKalba;
@Override
public String toString() {
return "Programuotojas: " + vardas + " " + pavarde + " " + amzius + " " + programavimoKalba;
}
public void setProgramavimoKalba(String programavimoKalba) {
this.programavimoKalba = programavimoKalba;
}
public Programuotojas(String vardas, String pavarde, int amzius, String programavimoKalba) {
super(vardas, pavarde, amzius);
this.programavimoKalba = programavimoKalba;
}
}
这是我尝试更新所有内容的功能
private ArrayList<Darbuotojas> darbuotojuArray = new ArrayList<Darbuotojas>();
private Darbuotojas darbuotojas = new Darbuotojas();
private void atnaujintiDarbuotoja() {
if (darbuotojuArray.size() == 0) {
System.out.println("Darbuotoju sarasas tuscias. Pridekite nauju darbuotoju");
} else {
for (int i = 0; i < darbuotojuArray.size(); i++) {
System.out.println("ID: " + i + " " + darbuotojuArray.get(i));
}
System.out.println("Pasirinkite kuri darbuotoja norite atnaujinti");
Scanner SI = new Scanner(System.in);
int userSelectsEmployeeID = Integer.parseInt(SI.nextLine());
if (darbuotojuArray.get(userSelectsEmployeeID) instanceof Programuotojas) {
System.out.println("Iveskite varda");
String naujasVardas = SI.nextLine();
System.out.println("Iveskite pavarde");
String naujaPavarde = SI.nextLine();
System.out.println("Iveskite amziu");
int naujasAmzius = Integer.parseInt(SI.nextLine());
System.out.println("Iveskite nauja programavimo kalba");
String naujaKalba = SI.nextLine();
Programuotojas darbProgramuotojas = (Programuotojas) darbuotojas;
darbProgramuotojas.setVardas(naujasVardas);
darbProgramuotojas.setPavarde(naujaPavarde);
darbProgramuotojas.setAmzius(naujasAmzius);
darbProgramuotojas.setProgramavimoKalba(naujaKalba);
}...
答案 0 :(得分:3)
Darbuotojas cannot be cast to Programuotojas
很清楚,并且不处理int to String
或String to int
由于您拥有Programuotojas extends Darbuotojas
,因此可以将Programuotojas
实例保存在Darbuotojas
对象中,但不能保存在另一端,请想象另一个类Foo extends Darbuotojas
您不能做
Darbuotojas foo = new Foo();
Programuotojas bar = (Programuotojas) foo;
您要在这里做什么
Programuotojas darbProgramuotojas = (Programuotojas) darbuotojas;
解决方案:
似乎您使用了错误的元素(在检查instance of
之后),并且您想要:
if (darbuotojuArray.get(userSelectsEmployeeID) instanceof Programuotojas) {
//...
Programuotojas darbProgramuotojas = (Programuotojas) darbuotojuArray.get(userSelectsEmployeeID);
}
答案 1 :(得分:0)
因为Programuotojas extends Darbuotojas
不是Darbuotojas 是 Programuotojas,所以演员阵容是非法的。换句话说,超类不能转换为子类