gpt4 book ai didi

java - 为什么 javax.money.CurrencyUnit 不可序列化?

转载 作者:行者123 更新时间:2023-11-29 10:10:33 25 4
gpt4 key购买 nike

为什么 javax.money.CurrencyUnit 不从 java.io.Serializable 扩展?它的所有子类型都实现了 java.io.Serializable,最重要的是,如果您想在 hibernate 映射中使用它,那么 findbugs 会阻止您(非常正确),因为:

[INFO] Class com.mycompany.SiteEntity defines non-transient non-serializable instance field defaultCurrency [com.mycompany.SiteEntity] In SiteEntity.java
[INFO] Class com.mycompany.SiteEntity defines non-transient non-serializable instance field supportedCurrencies [com.mycompany.SiteEntity] In SiteEntity.java
[INFO] Class com.mycompany.UserEntity defines non-transient non-serializable instance field sessionCurrency [com.mycompany.UserEntity] In UserEntity.java

这是否意味着必须在 hibernate 映射中使用类 JDKCurrencyAdapter?我更愿意使用接口(interface),但如果不可能,那么我将使用类。

最佳答案

针对 Serializable 的静态检查在两个方向上都是完全不可靠的。此处的 FindBugs 警告是善意的,但不应阻止您使用 CurrencyUnit就像你现在一样。

一个类可以有一个字段

Object aSerializableObject

并且是可序列化的,即使字段的静态类型不是——只要它确保放置在该字段中的引用是可序列化的。所以针对 Serializable 的静态检查产生假阴性。

它也会产生误报;实现 Serializable不能保证实例将毫无异常(exception)地序列化;它只是设计意图的陈述。

底线:虽然它伪装成静态类型特征,但可串行化实际上是动态类型特征。静态检查(无论是在代码内,例如 <T extends Serializable> 还是外部检查,例如这些 FindBugs 警告)都只是提示哪里可能出了问题。

关于java - 为什么 javax.money.CurrencyUnit 不可序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37866041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com