为什么java.lang.Void不能序列化?

前端之家收集整理的这篇文章主要介绍了为什么java.lang.Void不能序列化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
默认情况下可以序列化原语’void’,为什么对象’Void’不能扩展Serializable?

添加示例:

RootImplementation将有一个编译错误,说“Void不在其范围内”,因为它没有扩展Serializable.
虽然将’someMethod’声明为’void’,但这不会有问题.

public interface Root<R extends Serializable> extends Serializable {
  R someMethod();
}

public class RootImplementation implements Root<Void> {
  public Void someMethod() {
    return null;
  }
}

解决方法

好的,作为对你的例子的回应,如果你将方法改为void它就行不通,因为该方法必须有一个返回类型(即使Java现在允许在重写方法中使用协变返回类型).无效的讨论混淆了这个问题.

你想要做的是将一个类型参数声明为“将只返回null”. Void通常是一个很好的选择,但是要使Void工作,返回类型必须是Object. Void无法实现API中的每个接口,因为有人可能希望使用它来指示类型参数的null返回.

有三种方法可以查看您的问题:

> Serializable是一种过于严格的类型声明.你应该真正使用Object.你真的需要它是Serializable吗?>您可以将type参数声明为Serializable,并且实际上返回null.这并不能完全表明您每次都返回null,但这可能就足够了.>您可以声明自己的名为Null的类,它实现Serializable,可能作为Root接口的静态嵌套类,并在此情况下将其用作类型参数.您会发现制作自己的Null对象并不常见,即使在标准JDK中也存在(私有)对象.

猜你在找的Java相关文章