无法转换为Java

时间:2018-12-10 15:38:00

标签: java

在尝试更新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);
   }...

2 个答案:

答案 0 :(得分:3)

Darbuotojas cannot be cast to Programuotojas很清楚,并且不处理int to StringString 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,所以演员阵容是非法的。换句话说,超类不能转换为子类