java api中接口命名的标准是什么

一位同事问我有关Java API中的Throwable类的问题。

按照标准,我明白,每个单词end * able都是java API中的一个接口。 关于使用诸如接口名称之类的单词存在行业标准。 所以,我在不知不觉中告诉他这个作为java世界中所有exception和错误类型的基本接口。 然后他向我展示了这个类的java文件。

我的问题:

  1. 为什么java人选择这个名字作为一个类。 我认为这应该是默认的界面?

  2. 这是一种使用*能够用作界面的模式吗?

  3. 有没有其他类以* able结尾的例子?

问候。

这些’-able’名称通常是Java中的接口,但是我没有发现接口命名的官方约定,这表明’-able’名称应该是接口名称,尽管通常就是这种情况。

官方Java命名约定可以在这里找到 – 它非常精简,对类或接口命名没有任何限制:

关于你的Throwable问题,James Gosling曾经回答过为什么它是一个类而不是一个接口,即使这个名字更适合一个界面。

不幸的是,Sun / Oracle网站上的原始文章已经消失在互联网上,所以我只能提供间接归因:

编辑:由于我继续得到这个问题,我通过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有一些建议,但它们很模糊。

  1. 接口名称应该始终是一个形容词,如果可能的话,应该以“able”结尾一直是Java社区中命名约定的趋势。 这不必严格遵循,它只是一个命名约定,没有什么可以阻止你命名接口/类任何你想要的。

  2. 是的,请参阅http://www.iwombat.com/standards/JavaStyleGuide.html#Class%20and%20Interface%20Names

  3. 可克隆

*注意,接口名称通常应该是形容词,而类名通常应该是名词。

查看Sun发布的此样式指南文档的第15页。 http://java.sun.com/docs/codeconv/CodeConventions.pdf

关于将字母I添加到界面是否是一种好的风格,也存在一些争论。 (例如:ICat,IDog等),但这通常适用于其他语言而不是Java。

在我个人看来,约定只是一个“经验法则”,如果约定阻碍了代码的可读性,那么请使用更具描述性的接口/类名而不是遵循约定的接口/类名,但如果你真的努力想出一个好的描述性类名,也许你需要再考虑一下你的类/接口的function。

我们在这里讨论命名约定 ,是的,* able是命名接口的首选约定。 我相信你已经看到了,总会有例外。 例如, System.arraycopy不是驼峰式的。