Java 中的可序列化 - JGraphT 的 Pair 类 - 实例成员的类型是否也应该实现可序列化?

Lav*_*ari 2 java jgrapht serializable

这里开始,JGraphT 的Pair类是Serializable。但该类包含的实例成员(firstsecond)不是强制的Serializable

当前的实现如下所示:

public class Pair<A, B>
    implements
    Serializable
Run Code Online (Sandbox Code Playgroud)

我认为应该是这样的:

public class Pair<A extends Serializable, B extends Serializable>
    implements
    Serializable
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?如果不是,那么为什么 JGraphT 不这样做呢?

Kis*_*kae 5

因为Serializable仅在运行时相关。

如果您想使用带有不可序列化元素的对,它会起作用,但如果尝试序列化将会失败。但是,如果两个元素都是,Serializable那么无论通用边界如何,它们都将序列化。

  • Pair<A extends Serializable, B extends Serializable> implements Serializable=> 始终可序列化,但无法用于不可序列化A/B
  • Pair<A, B> implements Serializable=> 如果AB恰好Serializable在运行时期间可序列化,但不保证任何给定的Pair.
  • Pair<A, B>/ Pair<A extends Serializable, B extends Serializable>=> 无论类型参数如何,都永远不会被序列化,因为容器本身不是Serializable