为什么javax.money.CurrencyUnit不可序列化?
为什么为什么javax.money.CurrencyUnit不可序列化?,java,hibernate,java-money,jsr354,Java,Hibernate,Java Money,Jsr354,为什么javax.money.CurrencyUnit没有扩展自java.io.Serializable?它的所有子类型都实现了java.io.Serializable,最重要的是,如果您想在hibernate映射中使用它,findbugs将阻止您(非常正确),因为: 这是否意味着必须在hibernate映射中使用类JDKCurrencyAdapter?我更愿意使用接口,但如果不可能,我将使用该类。针对可序列化的的静态检查在两个方向上都是完全不可靠的。这里的FindBugs警告是出于好意,但不应
javax.money.CurrencyUnit
没有扩展自java.io.Serializable
?它的所有子类型都实现了java.io.Serializable
,最重要的是,如果您想在hibernate映射中使用它,findbugs将阻止您(非常正确),因为:
这是否意味着必须在hibernate映射中使用类
JDKCurrencyAdapter
?我更愿意使用接口,但如果不可能,我将使用该类。针对可序列化的
的静态检查在两个方向上都是完全不可靠的。这里的FindBugs警告是出于好意,但不应该阻止您像现在这样使用CurrencyUnit
一个类可以有一个字段
Object aSerializableObject
并且是可序列化的,即使字段的静态类型不是--只要它确保放置在该字段中的引用是可序列化的。因此,针对Serializable
的静态检查会产生误判
它还产生假阳性;实现Serializable
并不能保证实例将毫无例外地序列化;这仅仅是设计意图的陈述
一句话:虽然它伪装成一个静态类型特性,但序列化实际上是一个动态类型特性。静态检查(无论是在代码内部,如
,还是外部检查,如这些FindBugs警告)都只是提示可能出现错误的地方 针对Serializable
的静态检查在两个方向上都是完全不可靠的。这里的FindBugs警告是出于好意,但不应该阻止您像现在这样使用CurrencyUnit
一个类可以有一个字段
Object aSerializableObject
并且是可序列化的,即使字段的静态类型不是--只要它确保放置在该字段中的引用是可序列化的。因此,针对Serializable
的静态检查会产生误判
它还产生假阳性;实现Serializable
并不能保证实例将毫无例外地序列化;这仅仅是设计意图的陈述
一句话:虽然它伪装成一个静态类型特性,但序列化实际上是一个动态类型特性。静态检查(无论是在代码内部,如
,还是外部检查,如这些FindBugs警告)都只是提示可能出现错误的地方 可能是因为CurrencyUnit是一个接口,并且它已经扩展了另一个接口,所以它不能多次扩展另一个接口。您始终可以将它们包装在自定义类中并实现可序列化。这是一个好问题,特别是因为CurrencyUnit
指出所有实现都应该是可序列化的(在提供序列化的平台上)。您可以在@wero上问这个问题,实现应该是可序列化的。您注意到OP指出它的所有子类型确实扩展(或实现)了Serializable,所以OP的自定义类也需要实现Serializable。@SnakeDoc但是如果您的字段类型是CurrencyUnit
@wero该怎么办才公平。看起来他们从来没有打算有人使用currencUnit
作为类型,而是始终在具体类中实现它。也许他们应该添加一个抽象类,让它实现CurrencyUnit
和Serializable
。像这个示例类一样,TestCurrency实现了CurrencyUnit、可序列化、可比较的,这可能是因为CurrencyUnit是一个接口,并且它已经扩展了另一个接口,所以不能多次扩展另一个接口。您始终可以将它们包装在自定义类中并实现可序列化。这是一个好问题,特别是因为CurrencyUnit
指出所有实现都应该是可序列化的(在提供序列化的平台上)。您可以在@wero上问这个问题,实现应该是可序列化的。您注意到OP指出它的所有子类型确实扩展(或实现)了Serializable,所以OP的自定义类也需要实现Serializable。@SnakeDoc但是如果您的字段类型是CurrencyUnit
@wero该怎么办才公平。他们似乎从未打算让某人使用CurrencyUnit
作为一种类型,而是总是在一个具体的类中实现它。也许他们应该添加一个抽象类,让它实现CurrencyUnit
和Serializable
。与此示例类似,类TestCurrency实现了CurrencyUnit、可序列化、可比较的