当前位置:  开发笔记 > 编程语言 > 正文

在Java中,防止在实例方法返回后更改字段

如何解决《在Java中,防止在实例方法返回后更改字段》经验,为你挑选了2个好方法。

在我大学的一个软件开发课上,老师一直提到在测验中我们需要确保吸气剂返回的磁场需要"保护".我想她的意思是课外的任何东西都不应该改变它.她没有提供更多的解释.

例如:

class Foo {
    string[] bar = ;

    public string[] getBar() {
        return bar;
    }
}

任何调用getBar的代码都可以修改该数组中的元素.你怎么防止这种情况发生?我假设对象本身应该能够修改数组,而不是对象之外的任何东西.

这不是作业帮助,因为测验是几周之久.我只是想更好地理解Java,因为我的老师没有很好地解释.

更新:教师不仅允许我们在场上使用protected作为访问修饰符.



1> cletus..:

您可以使用集合并将其包装在Collections.unmodifiable*()中,也可以防御性地复制数组,集合或对象(如果它是可变的(总是哪些数组)).

例如:

class Foo {
    private String[] bar = ;

    public String[] getBar() {
        return bar == null ? bar : Arrays.copyOf(bar);
    }
}

您需要注意的是,这是一个浅层副本(克隆版也是如此).不确定你的老师克隆的问题是什么.



2> Mark..:

只是要添加到以前的答案之一,您希望确保使用集合而不是使用clone()方法来实现您在此处尝试实现的目标.这仅创建集合的浅表副本,集合副本中包含的所有对象引用仍指向与原始对象相同的对象,例如,即使原始集合不能,也可以修改集合副本中的对象.如果您正在尝试这样做,请确保您正在复制已归还的集合.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有