为什么我在方法中使用此代码:
DefaultTableModel model = new DefaultTableModel(null, vett){
public boolean isCellEditable(int row, int col) {
return false;
}
};
我收到警告,我必须在方法开始之前使用“@SuppressWarnings("serial")
”?
答案 0 :(得分:0)
这是Eclipse(?)警告您,您没有向正在创建实现Serializable的类提供SerialVersionUID
(您的内部类扩展了可序列化的DefaultTableModel)。
添加此项将解决警告:
private static final long serialVersionUID = 1L;
我个人不喜欢这个警告,因为作为开发人员,我们能够更好地了解是否需要版本ID(可能不是这种情况)。
答案 1 :(得分:0)
如您所见(http://docs.oracle.com/javase/7/docs/api/javax/swing/table/DefaultTableModel.html)DefaultTableModel实现Serializable接口(http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html)。
这意味着您正在创建一个私有静态final serial serialVersionUID的DefaultTableModel匿名子类。
所以你必须声明(并设置)该变量,例如:
private static final long serialVersionUID = 1L;
顺便说一下,1L不是首选使用的值;更好的想法是使用随机值(如果使用Eclipse,则使用嵌入式函数自动生成值)。
但是,在我看来,抑制警告不是一个好主意。
更新: 请阅读此有用信息:Why does serialization require a serial version UID in implemented class?
答案 2 :(得分:0)
这是因为DefaultTableModel是可序列化的,它真的希望你将serialVersionUID添加到该实现类,以防止接收端出现InvalidClassException。
序列化运行时与每个可序列化的类a关联 版本号,称为serialVersionUID,在此期间使用 反序列化以验证序列化的发送方和接收方 object已加载与该对象兼容的类 尊重序列化。如果接收器已加载了一个类 具有与其不同的serialVersionUID的对象 相应的发件人类,然后反序列化将导致 InvalidClassException。可序列化的类可以声明它自己的类 serialVersionUID通过声明一个名为的字段显式地显示 “serialVersionUID”必须是static,final和long类型:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;