在方法名称中使用"get"的最佳做法是什么?

mcj*_*erz 5 methods getter names

我已经注意到Java中的许多地方(包括C#),许多"getter"方法都以"get"为前缀,而其他许多方法则没有.我从未注意到Sun似乎遵循的任何模式.在getter方法名称中使用"get"有哪些指导或规则?

mik*_*era 6

我个人喜欢以下规则:

  • get每当值可以用相应的set方法直接修改时使用前缀
  • get在值不能直接设置为属性的情况下删除前缀(即没有等效的 setXXX 方法)

第二种情况的基本原理是,如果该值实际上不是用户可设置的“属性”,那么它就不需要 get/set 方法对。这意味着如果遵循此约定并且您看到 getXXX 方法,则您也可以假设存在 setXXX 方法。

例子:

  • String.length() - 因为字符串是不可变的,所以长度是一个只读值
  • ArrayList.size() - 添加或删除元素时大小会发生变化,但不能直接设置


Mar*_*rko 5

Java 中的“get”和“set”前缀对最初用作表示 java bean 的约定。后来,它只是一种封装约定,因为与 C# 不同,Java 没有适当的属性。


Tim*_*uri 5

它归结为语义.是的,C#有"属性",它为你提供了一个get/set'方法'存根......但.NET Framework中以"Get"开头的函数(..."methods"...)应该提示开发人员认为某些操作正在发生,其唯一目的是获得一些结果.

你可能认为这很奇怪,并说"为什么不只是使用返回类型来解决人们的问题?",答案很简单.考虑以下方法:

public Person CreatePerson(string firstName, string lastName) {...}
Run Code Online (Sandbox Code Playgroud)

只是通过该方法的名称,您可能会认为将涉及数据库活动,然后将返回新创建的"人员".

但是,这个怎么样:

public Person GetPerson(string firstName, string lastName) {...}
Run Code Online (Sandbox Code Playgroud)

只需使用方法的名称,您就可以假设正在对数据库中的人进行100%"安全"检索.

你永远不会多次打电话给"CreatePerson"......但是你应该总是安全地打电话给"GetPerson".(它不应该影响应用程序的"状态").