gpt4 book ai didi

java - Returning by 如何启用访问控制? ( java )

转载 作者:行者123 更新时间:2023-12-01 17:09:23 25 4
gpt4 key购买 nike

在 Java 中,当您为类的私有(private)字段创建 getter 时,如下所示(假设 child 是 ArrayList):

public ArrayList getChild() {
return this.child;
}

您返回对私有(private)字段“name”的引用(这意味着可以使用该引用修改 ArrayList??)在 C++ 中,这种相同类型的代码将返回一个副本,这将使对象的字段不受损害,如果副本被操纵。

可以通过调用此方法然后修改返回的 ArrayList 引用来修改私有(private)成员吗?如果是,那么像 Java 这样的语言中的 getter 是如何控制访问的呢?编写保护私有(private)成员的 getter 的正确方法是什么?

最佳答案

you return a reference to the private field "name"

嗯,不完全是。您返回child 字段的当前。重要的是要理解,这与以某种方式返回对字段本身的引用不同。方法返回后,对该字段的任何更改(例如将其设置为 null,或使其引用不同的列表)将不会被方法调用者看到。区分字段、引用(即字段的值)和引用引用的对象非常重要。

How does having a getter in a language like Java control access, then?

不直接。

And what is the proper way to write a getter that will return a copy?

这取决于类型。如果您使用不可变类型,则无论如何都不需要复制:)

对于集合,您可能会在原始集合上创建只读 View - 但调用者仍会看到对原始集合的更改。或者您可以明确创建自己的副本,例如

return new ArrayList<>(child);

关于java - Returning by 如何启用访问控制? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com