日期:2014-05-20  浏览次数:20642 次

关于java的函数命名
    最近在看java的集合。发现一个问题。在java里一般“动词”都是加s的,比如extends,implementes,这符合英语第三人称动词加s的规范。Collection接口中提供的几个方法:add(),remove()等是没有加s的,但是contains()却又加了s。我有点搞不懂了,难道这个s是随便加的,当时编写API的时候,就连命名都不统一?求解!

------解决方案--------------------
你的好奇心还挺好的来,没有考虑过这个问题···如果这样的话,contains还应该命名成isContains()比较合适的
------解决方案--------------------
那API也是由很多人一起开发的啊,不可能每个人的命名习惯都相同,即使有规范,也不能定得那么细啊,所以肯定会有差别的.
------解决方案--------------------
有一些加s是表示为工具类,里面有很多可以直接使用的方法。如Collections里面就提供了对集合的操作方法,使用很方便。
------解决方案--------------------
引用:
Quote: 引用:

你的好奇心还挺好的来,没有考虑过这个问题···如果这样的话,contains还应该命名成isContains()比较合适的

isXxx()感觉是返回对象的一个属性值,倒是很少见到用于返回值是布尔类型的函数的函数名是isXxx的形式。可能是我代码见得少的缘故。

isXxx()一般是是否的意思,是否有效,是否激活,是否存在···
------解决方案--------------------
contains()函数返回的是状态,性质类似于isXXX()这样的,英语A contains B表达的就是A包含B的状态
add(),remove()不一样,它们指示对象去完成动作,是一种祈使句
你仔细感受下,是不是这样
------解决方案--------------------
加s表示是别人定义的,不加s表示是自己主动发出的。
比如
public void test() throws IOException{
 ...
 ...
      throw new Exception("");
 ...
}
------解决方案--------------------
1:带有判断含义的方法动词,都使用第三人称单数,或者是第三人称单数形式的动界、动宾短语,常见的有 equals, contains, exists, matches, startsWith, endsWith, containsAll 等等

2:数据类型转换方法,一般为“to + 类型”,比如 toString 等等

3:对于普通的方法,一般采用动词原形,后面可以跟名词,也可不跟,比如 add, put, set, get, parse, parseInt,  等等。