java – 基本类型的瞬态最终和瞬态最终包装类型之间的区别
瞬态最终int和瞬态最终整数之间有什么不同.
使用int: transient final int a = 10; 序列化之前: a = 10 序列化后: a = 10 使用整数: transient final Integer a = 10; 序列化之前: a = 10 序列化后: a = null 完整代码: public class App implements Serializable { transient final Integer transientFinal = 10; public static void main(String[] args) { try { ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream( "logInfo.out")); App a = new App(); System.out.println("Before Serialization ..."); System.out.println("transientFinalString = " + a.transientFinal); o.writeObject(a); o.close(); } catch (Exception e) { // deal with exception e.printStackTrace(); } try { ObjectInputStream in = new ObjectInputStream(new FileInputStream( "logInfo.out")); App x = (App) in.readObject(); System.out.println("After Serialization ..."); System.out.println("transientFinalString = " + x.transientFinal); } catch (Exception e) { // deal with exception e.printStackTrace(); } } } 解决方法
如文章中所述
http://www.xyzws.com/Javafaq/can-transient-variables-be-declared-as-final-or-static/0 使字段瞬态将阻止其序列化,但有一个例外:
如果您将访问提到的JSL,您就会知道
但是Integer不是原始类型,它不是String,因此它不被视为常量表达式的候选者,因此它的值在序列化后不会保留. 演示: class SomeClass implements Serializable { public transient final int a = 10; public transient final Integer b = 10; public transient final String c = "foo"; public static void main(String[] args) throws Exception { SomeClass sc = new SomeClass(); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(sc); ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream( bos.toByteArray())); SomeClass sc2 = (SomeClass) ois.readObject(); System.out.println(sc2.a); System.out.println(sc2.b); System.out.println(sc2.c); } } 输出: 10 null foo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- HashMap ArrayList 和 List对象的转换
- java – Windows服务器中的时区无法正常工作
- java – Mockito ClassCastException
- Rich Client Java(Swing)应用程序的Peristence W
- JSP中常用的JSTL fmt(format格式化)标签用法整理
- java – 乐观锁定和org.hibernate.StaleObjectSt
- java – 在Oreo中没有持久通知的情况下,whatsapp
- 如何将MultipartFile从Java传递到Python?
- java – Android | SQLLite:不使用SQLiteOpenHe
- java – Re:youtube视频评级api(v3)在模拟器中工