[英]In Hibernate for composite-id, why the class should implement Serializable
[英]Why should a Comparator implement Serializable?
这不仅仅是一个Android的东西, Java SDK也有同样的建议 :
注意:比较器通常也可以实现java.io.Serializable,因为它们可以用作可序列化数据结构(如TreeSet,TreeMap)中的排序方法。 为了使数据结构成功序列化,比较器(如果提供)必须实现Serializable。
因此,我们的想法是,因为TreeMap是可序列化的,并且TreeMap可以包含一个Comparator,所以如果Comparator也是可序列化的,那将会很好。 这同样适用于集合中的所有元素。
除非以这种方式使用序列化,否则您可以放心地忽略它。
这应该可以帮到你: http : //docs.oracle.com/javase/7/docs/api/java/util/Comparator.html
注意:比较器通常最好实现java.io.Serializable,因为它们可以用作可序列化数据结构(如TreeSet,TreeMap)中的排序方法。 为了使数据结构成功序列化,比较器(如果提供)必须实现Serializable。
Serializeable是一个空白界面。 它不包含任何方法。 因此,要实现它,您需要说的是在类中implements Serializable
。 这对你来说不是一个巨大的负担。 如果你扩展Comparator
,你甚至不需要实现Serializable
因为超类为你做了这个,然后你根本不需要做任何事情来实现Serializable
。
当某些东西实现Serializable
,这意味着该对象可以随意转换为字节数组。 这用于通过Internet传输,存储在文件中等。说到非常粗略,序列化对于对象的工作方式,默认情况下,是将您尝试序列化的对象引用的每个对象,转为每个对象将对象转换为字节数组(即递归调用序列化),并连接字节数组以生成表示整个对象的字节数组。
现在,为什么Comparator
应该实现Serializable
? 假设您希望序列化TreeMap
或其他一些有序的Collection
。 序列化的目标是提供对象的完整表示。 像TreeMap
这样的集合中有一个Comparator
对象,因此为了能够生成捕获此类集合的每个方面的字节数组,您需要能够将Comparator
保存为字节数组。 因此, Comparator
需要是Serializable
以便其他东西可以正确序列化。
要在Java中序列化对象,应满足以下两个条件:
当任何数据结构使用比较器并且您希望该数据结构可序列化时,第2点(如上所述)强制比较器实现可序列化。
我已经在Java 5 API 链接中看到了java 5 APT ,它表示通过实现Comparator并不意味着无论如何都要实现Serializable接口,因此必须明确注意在一些习惯创建的Comparator类中获取Serializable
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.