gpt4 book ai didi

java - 什么时候可以使用公共(public)字段?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:46:28 27 4
gpt4 key购买 nike

我有一个主类,它有一个线程池,许多其他类使用它来对数据库执行操作。我目前有一个获取池的 getter 方法,它工作正常但看起来有点笨拙。

是否存在可以接受使用公共(public)字段而不是 getter/setter 方法的情况?

最佳答案

Are there any circumstances where it is acceptable to use a public field instead of getter/setter methods?

公共(public)字段不好的主要原因是它们将实现暴露给外界。这会导致不必要的耦合;即过度依赖于其他类的实现细节的类。这往往会使代码更难理解和更改。如果该字段不是 final ,您需要搜索整个代码库以确定没有任何东西“干扰”该领域。 (好的,IDE 使这更容易......但是将公共(public)字段与没有 setter 的私有(private)字段进行对比。)

第二个原因是您不能覆盖字段。一旦您在父类(super class)中公开了一个字段,您就无法在子类中做任何修改或限制其含义的事情。 (相比之下,getters 和 setters 可以被覆盖...)

唯一可以接受(从文体角度)拥有“公共(public)”字段的情况是声明字段的类是私有(private)嵌套类或内部类。结果是该字段上的所有依赖项都仅限于包含声明的源文件......这否定了上述问题。

更新 - 我忘记了 public static final ...但我们倾向于根本不将这些视为领域。无论如何,访问public static final是正常的做法字段直接。常量的想法是故意公开名称、类型和值...并且由于静态字段的性质,覆盖问题不适用。


I currently have a getter method to get the pool which works fine but seems a bit clumsy.

“笨拙”是一个见仁见智的问题。就我个人而言,我不认为 obj.getInstance()obj.instance相比笨拙.这只是 Java 方式1

不利的一面是,如果您没有 getInstance()方法,所有使用该池的类都必须具有对 instance 的硬编码引用 field 。如果(出于某些原因)您需要更改访问池的方式(例如,添加安全检查、添加计数器、延迟创建池、确保正确同步访问),那么您必须更改每个和您对字段进行编码引用的每个地方。但是有了 setter/getter ,您只有一个地方可以更改。

1 - 显然,其他语言的做法不同。但是你不是在写那些语言。 Java 就是这样。

关于java - 什么时候可以使用公共(public)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209663/

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