簡體   English   中英

獲取ClassCastException

[英]getting the ClassCastException

我正在收到ClassCastException,並且找不到發生它的原因。

這是我遇到的問題:(Semestre)強制轉換行:

private void F1(){
    int eol = listaSem.getCantNodos();

    Asignatura asig;
    for (int i = 0; i < eol; i++){
        Semestre seme = ((Semestre) listaSem.getData().getObjeto());
        ListaAsignatura listaAsig = (ListaAsignatura)seme.getDatos()[1];
        asig = (Asignatura) listaAsig.getData().getObjeto();
        System.out.println(asig.getSigla()+" | "+asig.getNombre()+" | Cantidad Justificaciones: "+asig.getCantJustificaciones());
    }
}

這是一些其他重要的代碼:

public class Semestre implements ID, Datos{

private String sem;
private ListaAsignatura listaAsig;

public Semestre(String sem) {
    this.sem = sem;
    listaAsig = new ListaAsignatura();
}
@Override
public Object[] getDatos() {
    Object[] datos = new Object[2];
    datos[0] = sem;
    datos[1] = listaAsig;

public class Nodo {

private Object objeto;
private Nodo next;

public Nodo(Object objeto, Nodo next) {
    this.objeto = objeto;
    this.next = next;
}

public Object getObjeto(){
    return objeto;
}

public class Lista {

protected Nodo head;

public Lista() {
    head = new Nodo(null, null);
}

public Nodo getData() {
    if (head.getNext() != null) {
        Nodo lista = new Nodo(((Datos) head.getNext().getObjeto()).getDatos(), null);
        Nodo tail = lista;
        for (Nodo aux = head.getNext().getNext(); aux != null; aux = aux.getNext()) {
            tail.setNext(new Nodo(((Datos) aux.getObjeto()).getDatos(), null));
            tail = tail.getNext();
        }
        return lista;
    } else {
        return null;
    }
}

Lista類中,方法getData()返回您創建的Nodo對象,如下所示:

Nodo lista = new Nodo(((Datos) head.getNext().getObjeto()).getDatos(), null);

因此,此Nodo對象的objeto字段objeto設置為getDatos()類的Semestre getDatos()方法的返回值,該類的類型為Object[]

在導致方法F1()出現問題的行中:

Semestre seme = ((Semestre) listaSem.getData().getObjeto());

...您正在使用getObjeto()返回的Object[]並嘗試將其SemestreSemestre ,從而導致ClassCastException

要解決此問題,您可以使用以下兩行更改該行及其后的一行:

Object[] datos = (Object[]) listaSem.getData().getObjeto();
ListaAsignatura listaAsig = (ListaAsignatura) datos[1];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM