java.lang.ClassCastException - Same Object - 两个类,为什么?

时间:2016-07-29 10:58:33

标签: java android arraylist casting

我正在使用android Studio 2.1.2。

我在两个活动之间有一个神秘的演员异常。

在First Activity中我有这个ArrayList:

 ArrayList<riparazione> nuovo = notizia.get_Elenco();

我将一个arraylist(parcellable)插入一个包中,以便在另一个活动中发送:

     Intent intent = new Intent(prenota_mostra_cellulari.this, prenota_mostra_dettagli.class);

                Bundle spedizione = new Bundle();
                    spedizione.putString("Nome",notizia.get_Marca());
                    spedizione.putString("Foto",notizia.get_Foto());
                    spedizione.putString("Marca",notizia.get_Nome());
                    spedizione.putParcelableArrayList("Riparazioni",nuovo);

                   intent.putExtras(spedizione);
                   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

在第二个活动中,我使用它来恢复ArrayList

  ArrayList<riparazione> nuovo = new ArrayList<>();

    Intent intent = getIntent();
    if (null != intent) {
        dati_cel = intent.getExtras();
        nuovo = dati_cel.getParcelableArrayList("Riparazioni");

        Log.d("Dati", String.valueOf(dati_cel.size()));
        Log.d("Dati arraylist", String.valueOf(dati_cel.size()));
        riparazione dads = nuovo.get(9);
    }

现在符合riparazione dads = nuovo.get(9);

我收到了Cast错误:

  

引起:java.lang.ClassCastException:com.example.luca.ireplace.orario无法强制转换为com.example.luca.ireplace.riparazione

我已经尝试了所有的东西,无论有没有Bundle用于发送,类输出结束输出都是为什么这个转换?我该如何解决?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

错误不在您发布的代码中。请记住,列表(通常是泛型)会遭受类型擦除。这意味着即使您将nuovo声明为ArrayList<riparazione>,Java也不会在运行时检查是否要将riparazione添加到列表中,或者当您传递它时列表是否实际包含riparazione s 。

您以某种方式在列表中插入了orario。错误发生在这里:

riparazione dads = nuovo.get(9);

我们不知道nuovo列表最初是如何构建的,但错误显然不在您发布的代码中。