一位同事问我有关java API中的Throwable
类的问题。
按照标准,我明白,每个结尾*的单词都是java API中的一个接口。关于使用诸如接口名称之类的单词存在行业标准。所以,我在不知不觉中告诉他这是java世界中所有异常和错误类型的基本接口。然后他向我展示了这个类的java文件。
我的问题:
为什么java人选择这个名字作为一个类。我认为这应该是默认的界面?
这是一种使用*能够用作界面的模式吗?
是否有其他类以* able?
问候。
答案 0 :(得分:29)
名词总是用于命名类,但Throwable是一个例外。
(看看我在那里做了什么?)
答案 1 :(得分:22)
这些'-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和其他人不是接口的原因是因为我们决定,或者我很早就决定了。 我决定我希望某个状态与每个被抛出的异常相关联。你不能用接口做到这一点;你只能用课程来做。那里的状态基本上是标准的。有消息,有一个快照,像那样的东西总是在那里。而且,如果你让Throwable成为一个界面,那么诱惑就是分配,使任何旧的对象都成为一个Throwable的东西。从风格上来说,投掷一般物体可能是一个坏主意,你想抛出的东西确实应该是那些真正捕捉异常性质和发生的事情的异常事物。它们不仅仅是一般的数据结构。
答案 2 :(得分:2)
还有其他如
当然,有很多接口无法结束 - 能。有些人喜欢在所有界面名称前加上“我”( IAdjustable 而不是可调节)。像代码格式化战争一样,它们不是普遍的协议。 Sun有一些suggestions,但它们很模糊。
答案 3 :(得分:2)
接口名称应该始终是一个形容词,如果可能的话,应该以“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。
在我个人看来,约定只是一个“经验法则”,如果约定阻碍了代码的可读性,请使用更具描述性的接口/类名而不是遵循约定的接口/类名,但是如果你真的很难想出一个好的描述性类名,也许你需要再考虑一下你的类/接口的功能。
答案 4 :(得分:1)
我们在这里讨论命名约定,是的,* able是命名接口的首选约定。我相信你已经看到了,总有例外。例如,System.arraycopy
不是骆驼。