2010-10-15 65 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

相關問題