通过 Java API,您会看到许多冲突的命名和实践,这让我很困惑。
例如:
String类有一个名为 count
的私有(private)变量(Integer),它跟踪字符串的大小,但是这是由名为 length()
的 getter 返回的>.
如果你转向任何类型的数组,它们没有长度的 getter 方法,它们只是通过公共(public)访问器传递变量,并且可以通过 arrayInstance.length
获取。
回到 String 类,我们有 String#getBytes()
方法,它是一个 getter,类似于 length()
getter,但是执行的逻辑稍微多一些获取并返回值。
就我个人而言,创建一个前缀为 get
的 getter 似乎是多余的,例如我宁愿输入 GamePacket#data()
而不是 GamePacket#getData ()
但是我觉得这个命名背后可能有更深层次的含义,而不仅仅是不一致。
此外,为什么 Array[]
不使用 length
的 getter?
有好心人可以帮我解释一下吗?
最佳答案
Getter(和 setter)来自 Java Bean 规范。使用它们的原因有很多:
- 大多数 Java 开发人员都希望访问器被这样命名
- 遵循这些约定的 API 更容易发现。例如,在我的 IDE 中,我经常按
get
CtrlSpace 来发现对象中可用的所有信息。 - 许多 API 和框架都依赖于这些约定来工作:JSP EL、从请求参数填充 bean 的 MVC 框架、JPA、Spring 等依赖注入(inject)框架等。
您通常将 getter 命名为与保存信息的私有(private)变量相同的方式,但重要的是封装和公共(public) API,因此没有什么能阻止您计算 getter 中的值,或者以不同的方式命名私有(private)字段。
关于可访问数据的 Java 约定。 (公共(public)访问器和 getter /命名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29843508/