返回“数据”可能会暴露内部数组?

2024-04-30

考虑一下这个

public class Data {

    private final SomeField[] fields;
    .....

    public SomeField[] getFields() {
        return map == null ? null : map.clone();
    }

安全性 - 方法返回内部数组

直接暴露内部数组允许用户修改一些代码 这可能很关键。返回数组的副本更安全。

我知道我们不应该使用clone()要复制对象,请使用以下命令复制对象copy constructor.

但这仍然复制了作为引用的内部对象。 建议采取哪些避免方法clone() above?

Thanks


实用方法 Arrays.copyOf(T[] original, int newLength) 将使用内部数组中的相同对象创建一个新数组。

返回内部数组的问题通常是为了防止对数组内容的意外更改,这些更改将被任何其他客户端共享。共享所包含的对象通常并不具有相同的关注顺序,但如果您正在实现某种地图,您的要求可能会更严格。

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

返回“数据”可能会暴露内部数组? 的相关文章

随机推荐

  • 更改表以给出外键约束

    我有一个表 其中有 2 列 是从两个不同的表复制的 我现在要做的是对列名 email 和 id 给出外键约束 如下所示 ALTER TABLE users role map ADD CONSTRAINT FK users role map
  • Rhino JavaScript 引擎是否有适用于 .NET 的端口

    我在一家同时拥有 Java 和 NET 实现应用程序的公司工作 该应用程序允许最终用户使用脚本自定义处理和业务规则 Java 版本支持 JavaScript 使用犀牛发动机 http www mozilla org rhino NET 应用
  • WebView获取最大滚动宽度

    大家好 我正在创建 epub 阅读器并在 android webview 中加载这本书 并且还使 webview 水平移动参考this https stackoverflow com questions 36617345 use horiz
  • PHP 4 中的匿名函数(lambda、闭包)

    PHP 4 中是否有一个技巧来实现返回函数的函数 我预计以下代码可以工作 function xxx a return function b print a a b b n f1 xxx 1 f1 2 不幸的是 在 PHP 4 中没有运气 也
  • 阐明 GWT RequestFactory 和 RequestContext 的工作原理

    我正在尝试将 RequestFactory 和编辑器框架实现到我的应用程序中 即使在研究了论坛 Google 开发者论坛和其他论坛之后 我仍然发现 关于将 RequestContext 与 RequestFactory 一起使用 我仍然不明
  • 如何在 Spring Boot WebMvcTest 中设置上下文路径

    我正在尝试从 Spring Boot 应用程序测试我的 Rest 控制器 并希望控制器在与生产中相同的路径下可用 例如我有以下控制器 RestController Transactional public class MyControlle
  • Github - 自动将问题分配给项目

    我想将问题自动分配给 Github 中的项目 基本上自动为每个自动打开的问题自动生成以下屏幕截图 有任何想法吗 有两个本机支持的选项 有一个官方操作可以添加问题并拉取请求projects https docs github com en i
  • iOS 全屏 Web 应用程序会丢弃 cookie?

    我经历过 当您启动 退出保存到仪表板 全屏模式 的网络应用程序时 iOS4 会丢弃 cookie 这是真的吗 有解决方法吗 这不是一个错误 这是一个功能 会话 cookie 即生命周期为 0 的 cookie 会在浏览器会话结束时被删除 在
  • Ruby 中类单例方法的方法查找

    我的印象是obj method导致 ruby 寻找method thusly Look in obj的单例类 查看包含的模块obj的单例类 Look in obj的班级 查看包含的模块obj s class 对类的超类重复步骤 3 和 4
  • 如果执行 shell 失败,jenkins 构建不会失败

    作为构建过程的一部分 我运行 git commit 作为执行 shell 步骤 但是 如果工作区中没有任何更改 Jenkins 将导致构建失败 这是因为当没有要提交的更改时 git 返回错误代码 如果是这种情况 我想要么中止构建 要么将其标
  • 如何在透明背景图像后面添加背景颜色?

    我试图在透明背景图像后面添加背景颜色 但它不起作用 我希望它位于名为 标题 的 div 中 我尝试先使用 png 文件 然后使用 gif 文件 我以为所有的 gif 都是透明图像 任何帮助 将不胜感激 heading background
  • 如何使用 NSHost 获取外部 IP 地址?

    我试图找到我的外部 IP 地址 但我只能找到位于 NAT 后面的本地 IP 地址 NSArray addresses NSHost currentHost addresses 有没有办法打印出公共地址 使用 NSHost 是个好主意吗 可能
  • 作为属性的自定义类的数组

    我试图使用自定义类的数组作为我的组件的属性 但问题是这些值没有保存到组件中 这意味着如果我设置值 保存所有内容并再次打开项目 组件的值消失 我的代码如下所示 unit Unit1 interface uses Windows ExtCtrl
  • 在C#中创建对象而不使用new关键字? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 有没有一种方法可以在 C 中不使用
  • 如何在 Ubuntu 10.04 上使用 PostgreSQL 8.4.4 生成 uuid?

    我正在 Ubuntu 10 04 上运行 PostgreSQL 8 4 4 我正在尝试生成 uuid 但找不到方法 我确实有 uuid ossp sql usr share postgresql 8 4 contrib uuid ossp
  • 如何在 Angular 5 中执行缓存 http get 请求?

    import Injectable from angular core import HttpClient HttpErrorResponse from angular common http import Observable from
  • Node.js 管理频繁变化的本地依赖项

    我目前正在开发我的第一个较大的 Node js 应用程序 该应用程序应该使用类似插件的依赖项尽可能模块化地工作 因为我处于开发的早期阶段 而且对节点也很陌生 所以这涉及大量的试验和错误 因此我需要经常重新启动应用程序 因此启动时间应尽可能短
  • Global.asax 模板在 Visual Studio 中不可用

    当我尝试向我的网络项目 添加新项目 通过右键单击 添加新项目 时 没有适合它的模板 可能是什么问题 我用的是VS2008 附加信息 当我右键单击解决方案并 添加 新网站 时 我有零个模板可供选择 我尝试过跑步devenv installvs
  • Windows Phone 8.1 XAML 应用程序显示奇怪的版本

    我已经为我现有的应用程序之一创建了 Windows Phone 8 1 XAML 版本 我将包版本设置为1 5 0 0 创建的文件名为SlovakApps WindowsPhone 1 5 0 1 AnyCPU bundle appxupl
  • 返回“数据”可能会暴露内部数组?

    考虑一下这个 public class Data private final SomeField fields public SomeField getFields return map null null map clone 安全性 方法