2010-10-15 100 views
7

我被一位同事问到关于java API中的Throwable类。java api中接口命名的标准是什么

按照标准,我明白了,每个单词的结尾*是java API中的一个接口。有一个关于使用接口名称这样的词的行业标准。所以,我不知不觉地告诉了他这个作为java世界中所有异常和错误类型的基础接口。然后他向我展示了这个类的java文件。

我的问题:

  1. 为什么java的人已经choosen这个名字是一个类。我认为这应该是一个默认的接口?

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

  3. 是否还有其他以* able结尾的类示例?

问候。

+1

可串行化,Iterable,Comparable,Runnable,Callable。所有相当频繁使用的接口。 – Thilo 2010-10-15 04:28:30

+0

@Thilo:它们实际上是接口。我正在研究以这种方式结束的课程。 – 2010-10-15 04:32:08

回答

20

这些'可以'的名字在Java中是非常常见的接口,但是没有官方的接口命名约定,我发现'可以'的名字应该是接口名称,但通常是是这样的。

官方Java命名约定可以在这里找到 - 这是很瘦,真的没有了类或接口命名任何限制:

至于你Throwable的问题,詹姆斯高斯林曾经回答过为什么它是一个类而不是一个接口,尽管这个名称更适合于接口。

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

编辑:既然我继续得到这个问题的提议,我找到了通过Wayback Machine的太阳讨论链接,这里: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的东西。从风格上来说,抛出一般对象可能是一个坏主意,你想要抛出的东西应该是意图成为例外的事物,这些例外真正捕捉到异常的性质以及发生了什么。它们不仅仅是一般的数据结构。

+1

+1 JG的伟大信息我以前没有见过 – 2010-10-15 04:41:59

+0

+1在互联网上有很好的手表,谢谢你的回答。 – 2010-10-16 02:40:23

+0

真的很好找! – RecursiveExceptionException 2016-06-27 00:01:45

29

名词总是用于命名类,但Throwable是个例外。

(见我做什么呢?)

+1

小心,像“永远”的话。 *收藏*,*地图*,*设置*,*列表*,...会喜欢一个字。但是,是的,我看到你做了:) – 2010-10-15 04:34:26

+12

为双关+1 = 8-) – Yuval 2010-10-15 04:39:48

+5

也许Throwable是一个错误:D – mschonaker 2010-10-15 04:46:28

0

我们正在谈论命名约定这里,是的,*能是命名接口的首选约定。正如我相信你看到的那样,总是有例外。例如,System.arraycopy不是骆驼式的。

2

还有其他如

当然也有很多是不结束接口 - 能够。有些人喜欢用'I'(IAdjustable而不是可调)将其所有接口名称加前缀。就像代码格式化战争一样,它们不是通用的协议。 Sun有一些suggestions,但他们很模糊。

2
  1. 接口的名字应该永远是一个形容词,应尽可能在“能”端已经在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。

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

+0

你的意思是:可复制的,其他人似乎并不在Java API中。 – 2010-10-15 04:48:14

+0

@ vijay.shad:谢谢,我的不好,更正了。 – 2010-10-15 05:10:41

相关问题