[英]What will be the impact if there is a non serializable field in a Serializable class?
我正在做一些代碼審查,並遇到了包含一個不可序列化字段的可序列化類。 該字段均未聲明為transient 。 這種代碼可以稱為代碼氣味嗎? 如果是,那為什么呢?
public class A implements Serializable{
private B field ; // B is non serializable
}
如果對象的執行時間類型不可序列化,則在嘗試對其進行序列化時將引發異常。
例如,這確實序列化了:
導入java.io. *;
public class Test implements Serializable {
private Object object;
public static void main(String[] args) throws Exception {
Test test = new Test();
test.object = "";
// Now serialize test
}
}
這將創建一個適當的文件-但如果將test.object
設置為new Object()
,則它將引發異常。
這不僅是代碼的味道-這是一個錯誤,除非B
是一個抽象類並且所有具體的子類都可以序列化...或者您知道其他方式,除非field
的值可以序列化或為null,否則它將永遠不會序列化。
當您嘗試序列化對象時,這將是一個例外(除非字段為null或實際對象是B
的可序列化子類的對象)。
您必須使其成為瞬態的或可序列化的(或實現自己的序列化方法)。
不是該字段,而是此字段指向的對象可能導致NotSerializableException。 例如,如果field
為null,則不會有異常。 否則,如果field
指向C的實例,而C的實例是B的可序列化的子類,則不會例外。
如果您嘗試序列化A
將導致錯誤。 因為B
不可序列化。 是代碼味道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.