case 类私有构造函数 - 需要 readResolve 实现

2023-12-04

我只是在谷歌上搜索如何使用私有构造函数创建案例类。以下是执行此操作的正确方法,如中所述

如何在案例类同伴中覆盖 apply

object A {
  def apply(s: String, i: Int): A =
    new A(s.toUpperCase, i) {} //abstract class implementation intentionally empty
}
abstract case class A private[A] (s: String, i: Int) {
  private def readResolve(): Object = //to ensure validation and possible singleton-ness, must override readResolve to use explicit companion object apply method
    A.apply(s, i)
  def copy(s: String = s, i: Int = i): A =
    A.apply(s, i)
}

以下是我到目前为止的理解:-

如果我们声明一个 case 类抽象,那么编译器将不会生成 copy 和 apply 方法的实现。

以下是我正在努力解决的问题:-

为什么需要提供 readResolve 的实现?


readResolve 实现是为了防止通过编辑类的序列化副本来创建案例类的无效实例。

根据您对使用代码的环境的信任程度,您可能会觉得可以安全地忽略此风险。

它的出现是因为案例类扩展了Serializable,因此最终可能会被序列化并写入文件(或数据库,或任何地方)。此时,可以编辑文件/DB/中的序列化副本以创建无效值(例如,使s小写)。反序列化回来时,“活动”实例将无效,除非readResolve重写反序列化过程中使用的方法以防止这种情况发生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

case 类私有构造函数 - 需要 readResolve 实现 的相关文章

随机推荐

  • .NET 的免费 UML 绘图库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个免费的 NET C 库 我可以在我的程序中使用它并简单地绘制 UML 图 尤其是类图 我尝试使用 Netron 图表库 但它有点棘手
  • 尝试从私有 ECR 中提取图像时出现“没有基本身份验证凭据”

    我的 Dockerfile 中间有以下行 用于从我的私有 ECR 检索图像 FROM dkr ecr ap southeast 1 amazonaws com prod ff03401 这是我在尝试构建此代码时在 AWS Codebuild
  • 如何查找链接的标题文本

    如何在 jquery 中找到链接的标题文本 您可以使用attr找到title属性 var title jQuery a attr title replace a with your own selector
  • EF Core - System.InvalidOperationException:ExecuteReader 需要打开且可用的连接。连接的当前状态已关闭

    我正在使用 Entity Framework Core 运行 ASP NET Core 1 0 Web 应用程序 当应用程序运行一段时间 24 48 小时 时 应用程序在对任何端点或静态资源的每个请求上开始崩溃 并引发错误System In
  • 复制范围,包括粘贴到 Outlook 电子邮件正文时的格式

    我已经搜索了这个问题 但仍然没有得到它的确切代码 我需要将数据透视表的颜色从 Excel 复制到 Outlook 主体 运行代码时 我得到了格式 但唯一的问题是表格的颜色变成了黑色和灰色 请帮助我弄清楚如何放置我需要的确切颜色 这是我的代码
  • 包括 Google 字体链接或导入?

    在页面上包含 Google 字体的首选方式是什么 Via the tag 通过样式表中的导入 import url https fonts googleapis com css2 famil
  • 按列快速串联数千个文件

    我在用R使用以下命令绑定约 11000 个文件 dat lt do call bind cols lapply lfiles read delim 这慢得令人难以置信 我使用 R 是因为我的下游处理 例如创建绘图等 是在 R 中进行的 按列
  • WCF VS.旧版 ASP.Net Web 服务 [重复]

    这个问题在这里已经有答案了 可能的重复 Web 服务 WCF 与标准 谁能给我推荐一些文档来描述为什么 WCF 比旧版 ASP NET Web 服务更好 我对性能和安全性特别感兴趣 WCF 更加灵活 可以通过 HTTP 使用 如旧版 ASM
  • TypeError:“int”类型的对象没有 len() 需要错误帮助[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在为我的代码编写一段代码 当用户输入 7 位数字时 它会将这些数字分别乘以 3 和 1 这是代码 当它检查用户是否输入了 7 位数字时 出现以下错误 类型错误 int 类型的对象没有
  • 使用 Bouncy Castle c# 创建 CRL 文件

    我已经使用 Bouncy Castle 构建了自己的根 CA 证书 并使用它来构建其他证书 我想使用 Bouncy Castle C 构建一个证书吊销列表 CRL 以包含已吊销的证书列表 例子 Retrieve CA root certif
  • 多项式函数的 LinEst vba

    我正在尝试使用 vba 计算多项式回归 首先 我尝试了 y x 2 b OUTPUT WorksheetFunction Application LinEst A Application Power C 2 True True 其中 A 和
  • 显示:弯曲和图像大小调整/居中

    我在用display flex 使图像居中并max width max height来调整它的大小 其中有几张图像 有些宽 有些高 有些正方形 我想确保它们的尺寸都足够大以供查看 例如 我假设如果图像达到最大宽度而不是高度 则它应该与宽度保
  • 减少()有什么问题?

    关于Python 3 0中reduce 函数的变化以及如何删除它 网上似乎有很多激烈的讨论 我有点难以理解为什么会出现这种情况 我发现在各种情况下使用它是相当合理的 如果这种蔑视只是主观的 我无法想象会有这么多人关心它 我缺少什么 减少 有
  • 使用 ggsave 将系统时间和日期添加到 pdf

    我有一个 pdf 文件 我试图打印该 pdf 文件名称上的时间和日期 我尝试使用很多不同的方法 但仍然一无所获 你能帮我吗 打印为pdf的代码如下 ggsave Title of file pdf marrangeGrob grobs pl
  • 加载、保存然后再次加载图像会抛出“GDI+ 中发生一般错误”

    This 似乎犯了臭名昭著的错误 我记得不久前得到了不同的代码 但是它回来了 复仇 但有一些我似乎无法弄清楚的新代码 绝对是generic 一定 The Goal 我正在尝试构建一个表单 允许用户 选择一个图像 按 保存 关闭表单 然后将图
  • Android Studio导入facebook库奥德赛

    我正在尝试通过 Android Studio 中的 Facebook 库在我的应用程序中使用 Facebook 登录 在学习了 9 个关于如何在 Android Studio 0 6 1 上导入该库的教程之后 在单击 清理项目 之前一切都很
  • 使用 ColdFusion 的 SAML 服务提供商

    我正在尝试使用 ColdFusion 9 对 SAML 2 0 进行测试 我想要的只是使用 SAML 生成的 xml 并进行处理 我正在关注这里给出的文章http blog tagworldwide com p 19 存档版本 但是当我启动
  • WordPress 全局 $post 变量为空

    我正在开发一个 WordPress 插件 管理背景图像 当我尝试使用 global post print r post 该对象是空的 可能有一些必需的数据 我不知道是什么 如果您知道请帮助我 WordPress 全局变量 post包含当前的
  • 如何优雅地终止一个进程?

    我想终止多个进程 但我想让每个进程都有机会保存其数据 询问用户有关保存文件的信息 甚至忽略关闭请求 So TerminateProcess这是不可能的 因为它会立即终止进程 另一种方法是使用SendMessage PostMessage发送
  • case 类私有构造函数 - 需要 readResolve 实现

    我只是在谷歌上搜索如何使用私有构造函数创建案例类 以下是执行此操作的正确方法 如中所述 如何在案例类同伴中覆盖 apply object A def apply s String i Int A new A s toUpperCase i