2 回答
TA贡献1811条经验 获得超5个赞
根本原因:这是来自 IDE 的警告,getSerializableExtra返回 a Serializable,而您正尝试转换为ArrayList<PuntoNota>. 如果程序无法将其转换为您期望的类型,它可能会在运行时抛出ClassCastException。
解决方案:在android中传递用户定义的对象,你的类应该实现Parcelable而不是Serializable接口。
class PuntoNota implements Parcelable {
private String punto;
private String nota;
public PuntoNota(String punto, String nota) {
this.punto = punto;
this.nota = nota;
}
protected PuntoNota(Parcel in) {
punto = in.readString();
nota = in.readString();
}
public String getPunto() {
return punto;
}
public String getNota() {
return nota;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(punto);
dest.writeString(nota);
}
public static final Creator<PuntoNota> CREATOR = new Creator<PuntoNota>() {
@Override
public PuntoNota createFromParcel(Parcel in) {
return new PuntoNota(in);
}
@Override
public PuntoNota[] newArray(int size) {
return new PuntoNota[size];
}
};
}
在发送方
ArrayList<PuntoNota> myList = new ArrayList<>();
// Fill data to myList here
...
Intent intent = new Intent();
intent.putParcelableArrayListExtra("miLista", myList);
在接收端
ArrayList<? extends PuntoNota> listaFinal = getIntent().getParcelableArrayListExtra("miLista");
TA贡献1783条经验 获得超4个赞
您可以设置警告抑制@SuppressWarnings
注释。
例子:
@SuppressWarnings("unchecked") listaFinal = (ArrayList<PuntoNota>) getIntent().getSerializableExtra("miLista");
这是一个注释,用于抑制有关未经检查的通用操作(不是异常)的编译警告,例如强制转换。它本质上意味着程序员不希望收到有关他在编译特定代码位时已经知道的这些信息的通知。
您可以在此处阅读有关此特定注释的更多信息:
此外,Oracle 在此处提供了一些有关注释使用的教程文档:
正如他们所说,
“在与泛型出现之前编写的遗留代码交互时,可能会出现‘未经检查’警告(在题为泛型的课程中讨论)。”
添加回答
举报