Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么javax.money.CurrencyUnit不可序列化?_Java_Hibernate_Java Money_Jsr354 - Fatal编程技术网

为什么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、可序列化、可比较的