加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:45:17 所属栏目:Java 来源:网络整理
导读:默认情况下可以序列化原语’void’,为什么对象’Void’不能扩展Serializable? 添加示例: RootImplementation将有一个编译错误,说“Void不在其范围内”,因为它没有扩展Serializable. 虽然将’someMethod’声明为’void’,但这不会有问题. public interface
默认情况下可以序列化原语’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中也存在(私有)对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读