请帮助,我在下面的代码中收到以下消息:
listaFinal = (ArrayList<PuntoNota>) getIntent().getSerializableExtra("miLista");
AdapterDatos adapter = new AdapterDatos(this, listaFinal);
PuntoNota.java
public class PuntoNota implements Serializable{
private String punto;
private String nota;
public PuntoNota (String punto, String nota){
this.punto = punto;
this.nota = nota;
}
public String getPunto(){
return punto;
}
public String getNota(){
return nota;
}
}
AdapterDatos:
public AdapterDatos(Context context, ArrayList<PuntoNota> puntoNotaList) {
this.context = context;
this.puntoNotaList = puntoNotaList;
}
该应用程序运行良好,但是我收到以下消息:
未经检查的演员:'java.io.Serializable'到'java.util.ArrayList'更少...(Ctrl + F1)。
关于此代码:(ArrayList)getIntent()。 getSerializableExtra(“ myList”);建议删除或隐藏此消息吗?
答案 0 :(得分:2)
根本原因::这是来自IDE的警告,getSerializableExtra
返回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");
答案 1 :(得分:1)
您可以设置警告抑制@SuppressWarnings
注释。
示例:
@SuppressWarnings("unchecked")
listaFinal = (ArrayList<PuntoNota>) getIntent().getSerializableExtra("miLista");
它是一个注释,用于禁止显示有关未经检查的泛型操作(非异常)(例如强制类型转换)的编译警告。从本质上讲,这意味着程序员不希望在编译特定代码位时收到有关他已经知道的这些通知。
您可以在此处阅读有关此特定注释的更多信息:
此外,Oracle在此处提供了一些有关注释用法的教程文档:
如他们所说,
“当与仿制药问世之前编写的遗留代码进行交互时(在名为“仿制药”的课程中讨论),可能会出现“未选中”警告。”