java api中接口命名的标准是什么
一位同事问我有关Java API中的Throwable
类的问题。
按照标准,我明白,每个单词end * able都是java API中的一个接口。 关于使用诸如接口名称之类的单词存在行业标准。 所以,我在不知不觉中告诉他这个作为java世界中所有exception和错误类型的基本接口。 然后他向我展示了这个类的java文件。
我的问题:
-
为什么java人选择这个名字作为一个类。 我认为这应该是默认的界面?
-
这是一种使用*能够用作界面的模式吗?
-
有没有其他类以* able结尾的例子?
问候。
这些’-able’名称通常是Java中的接口,但是我没有发现接口命名的官方约定,这表明’-able’名称应该是接口名称,尽管通常就是这种情况。
官方Java命名约定可以在这里找到 – 它非常精简,对类或接口命名没有任何限制:
关于你的Throwable
问题,James Gosling曾经回答过为什么它是一个类而不是一个接口,即使这个名字更适合一个界面。
不幸的是,Sun / Oracle网站上的原始文章已经消失在互联网上,所以我只能提供间接归因:
- http://c2.com/cgi/wiki?JavaExceptionQuestion
- http://www.ibm.com/developerworks/forums/thread.jspa?threadID=58994&tstart=45
编辑:由于我继续得到这个问题,我通过Wayback Machine找到了Sun讨论的链接,在这里: http ://web.archive.org/web/20071013225816/http://java.sun.com /features/2002/03/gosling.html?source=jdc_news&date=20020430
JDC:为什么Throwable不是一个接口? 这个名字有点暗示它应该是。 能够捕获类型,即try {} catch(),而不仅仅是类。 这将使Java编程语言更加灵活。
JG:Throwable和其他人不是接口的原因是因为我们决定,或者我很早就决定了。 我决定我希望有一些状态与每个被抛出的exception相关联。 你不能用接口做到这一点; 你只能用课程来做。 那里的状态基本上是标准的。 有消息,有一个快照,像那样的东西总是在那里。 而且,如果你让Throwable成为一个界面,那么诱惑就是分配,使任何旧的对象成为一个Throwable的东西。 从风格上来说,投掷一般物体可能是一个坏主意,你想抛出的东西确实应该是那些真正捕捉exception性质和发生的事情的exception事物。 它们不仅仅是一般数据结构。
名词总是用于命名类,但Throwable是一个例外。
(看看我在那里做了什么?)
还有其他如
- 激活
- 可观察
当然,有很多接口无法结束。 有些人喜欢在所有界面名称前加上’I’( IAdjustable而不是Adjustable )。 像代码格式化战争一样,它们不是普遍的协议。 Sun有一些建议,但它们很模糊。
-
接口名称应该始终是一个形容词,如果可能的话,应该以“able”结尾一直是Java社区中命名约定的趋势。 这不必严格遵循,它只是一个命名约定,没有什么可以阻止你命名接口/类任何你想要的。
-
是的,请参阅http://www.iwombat.com/standards/JavaStyleGuide.html#Class%20and%20Interface%20Names
-
可克隆
*注意,接口名称通常应该是形容词,而类名通常应该是名词。
查看Sun发布的此样式指南文档的第15页。 http://java.sun.com/docs/codeconv/CodeConventions.pdf
关于将字母I添加到界面是否是一种好的风格,也存在一些争论。 (例如:ICat,IDog等),但这通常适用于其他语言而不是Java。
在我个人看来,约定只是一个“经验法则”,如果约定阻碍了代码的可读性,那么请使用更具描述性的接口/类名而不是遵循约定的接口/类名,但如果你真的努力想出一个好的描述性类名,也许你需要再考虑一下你的类/接口的function。
我们在这里讨论命名约定 ,是的,* able是命名接口的首选约定。 我相信你已经看到了,总会有例外。 例如, System.arraycopy
不是驼峰式的。