Methods “使用”的最佳实践是什么;获得;在方法名称中?
我注意到在Java(包括C)的许多地方,许多“getter”方法都以“get”作为前缀,而其他许多方法则没有。我从来没有注意到太阳似乎在遵循什么样的模式。在getter方法名称中使用“get”有哪些准则或规则?Java中的“get”和“set”前缀对最初用作表示Javabean的约定。后来,它变成了一种封装约定,因为Java不像C#那样没有正确的属性。Java(还)不支持属性。能手和二传手是解决这个问题的一个障碍。其他语言—包括C#—支持属性,您应该改用这些属性。这也不仅仅是一个“最佳实践”:C#中的序列化依赖于属性,而不是getter和setter,因此如果需要序列化类,不使用属性可能会在将来导致各种问题 属性的优点是它们使代码更具可读性。差不多Methods “使用”的最佳实践是什么;获得;在方法名称中?,methods,getter,names,Methods,Getter,Names,我注意到在Java(包括C)的许多地方,许多“getter”方法都以“get”作为前缀,而其他许多方法则没有。我从来没有注意到太阳似乎在遵循什么样的模式。在getter方法名称中使用“get”有哪些准则或规则?Java中的“get”和“set”前缀对最初用作表示Javabean的约定。后来,它变成了一种封装约定,因为Java不像C#那样没有正确的属性。Java(还)不支持属性。能手和二传手是解决这个问题的一个障碍。其他语言—包括C#—支持属性,您应该改用这些属性。这也不仅仅是一个“最佳实践”:C
obj.setX(10);
在Java中,成为
obj.X = 10;
然而在幕后,X是一种方法,而不是一个变量,因此可以执行脏输入检查等。过去的情况肯定是,API经常公开只读属性,而不使用
get
前缀:甚至更新的示例也是合理的
这样做的好处是所涉及的绒毛较少。缺点是,任何试图根据约定自动确定属性的东西都不会发现它们。就我个人而言,我倾向于错误地加入前缀
当然,在C#中,它基本上是不相关的,因为存在“真实”属性:)Objective C2.0也使用属性,使用相同的点语法 在此之前,它对getter和setter使用了稍微不同的命名方案(当然,它们仍然可以与属性一起使用,或者用于普通的旧属性) 也就是说,get的使用方式不同。它不返回值,但将结果存储在传入的变量中
典型的getter与属性具有相同的名称,setter是以set作为前缀的属性(根据Java的约定)。KVO(Key Value Observation)系统使用这些约定,因此应该遵守。归根结底是语义。是的,C#具有“属性”,它为您提供了一个get/set“method”存根。。。但是.NET Framework中以“Get”开头的函数(…“methods”…)应该会提示开发人员,某些操作只是为了得到一些结果 你可能会觉得这很奇怪,然后说“为什么不使用返回类型来提示人们呢?”,答案很简单。考虑以下方法:
public Person CreatePerson(string firstName, string lastName) {...}
仅通过该方法的名称,您可能会发现将涉及数据库活动,然后将返回一个新创建的“person”
但是,这个呢:
public Person GetPerson(string firstName, string lastName) {...}
仅凭该方法的名称,您就可以假设正在从数据库中100%地“安全”检索一个人
你永远不会多次给“CreatePerson”打电话。。。但是你应该觉得随时打电话给“GetPerson”是安全的。(它不应影响应用程序的“状态”。Java中的最佳实践是为属性使用get和set前缀 框架、标记库等将查找带有这些前缀的方法,并将它们用作属性 所以,如果您有这样一个java类
public class User{
private String name;
public String getName(){ return name;}
public void setName(String name){ this.name = name; }
}
。。使用struts标记(或任何其他基于ognl的标记库),您将使用user.name
访问name属性
Spring框架在xml配置文件中也使用此约定。这取决于具体情况。它通常是冗余信息,即使在没有属性的语言中也是如此
在C++中,不是GETActer()/StActer()对,它通常提供两个重载的THARD()函数: 无效属性(Foo f);//二传手 Foo Attr();//吸气剂
在Java中,通常的做法是在get/set前面加前缀。我不得不说,最好的做法是按照你的语言标准去做。在Java中,人们希望看到get/set前缀,因此省略它们可能会让人感到困惑,即使它们不是严格必需的。只是一个简短的附录:另一个约定是布尔字段的getter前缀是“is”,而不是“get”,例如
bool isEnabled(){return enabled;}
我个人喜欢以下规则:
- 只要可以使用相应的
方法直接修改值,就使用set
前缀get
- 如果值不能直接设置为属性(即没有等效的setXXX方法),请删除
前缀get
-因为字符串是不可变的,所以length是只读值String.length()
-添加或删除元素时大小会更改,但不能直接设置ArrayList.size()
get
。鉴于上下文是Java,我不确定只读属性与名称以“get”开头的函数相比是什么意思…@toddmo:Ah,这还不清楚。在C#中,它几乎总是一个属性。我知道在C#中,函数通常是起始的
public class User{
private String name;
public String getName(){ return name;}
public void setName(String name){ this.name = name; }
}