2013-03-14 72 views

回答

2

通常我在那裏表示一個接口。沒有我是一堂課。我個人不喜歡這個。我認爲這在網絡中更常見。我還沒有看到它在Java中太多

原因,我不喜歡:

  • 的IDE現在表明,指示類是否是一個接口或沒有圖標。
  • 如果我想將接口更改爲抽象類,則必須重命名類
  • 它會傷害可讀性。
+0

1)考慮下面這行代碼:'ICollection collection = this.Foo();'你在IDE中沒有圖標。 2)從合同切換到實現*是代碼的重大變化(沒有多重繼承)3)請參閱點1) – 2013-03-14 10:33:54

+0

1)更正你沒有圖標,但你真的在乎它是否是一個接口嗎? 2)同意它將更改代碼,但爲什麼我必須重新命名爲重構的一部分。我想專心於編譯和結構。 3)讓我在那裏我不認爲有助於可讀性。它使得班級名稱更難以記住IMO – RNJ 2013-03-14 10:36:13

+0

3)你不會將'I'添加到類中 - 因此班級的名稱是* not *難以記憶,並且避免混淆什麼是類和什麼是界面;-) – 2013-03-14 13:07:09

1

'我'代表界面。將接口與類/結構區分開來是一種常見的命名約定。

接口是而不是類 - 它們定義的行爲和類提供了實現。

閱讀這篇文章在MSDN上的詳細信息:Choosing Between Classes and Interfaces

接口定義簽名的一組成員 實施者必須提供的。接口無法爲成員提供實施 的詳細信息。例如,ICollection界面 定義了與處理集合相關的成員。 實現接口的每個類都必須提供 這些成員的實現細節。類可以實現多個接口。

+0

這是針對微軟相關技術還是所有編程語言,我們都有這樣的代碼約定? – 2013-03-14 10:36:56

+0

主要是微軟。 – 2013-03-14 13:05:27

1

這是一個從Hungarian notation被認爲是一個好主意的年齡的神器。它讓用戶知道名稱是用於界面的。

此外,這是一個非常愚蠢的做法。

接口的名稱應反映它表示的類之間的合同種類。它應該而不是告訴你它已被綁定到哪個類。

應該class PDF extends Document implements Printable,因爲它可以讓你知道類實現某種原因print()方法(在一個真實的世界,將是實際上是一個糟糕的API設計,但是這是一個例子)的代替class PDF extends Document implements IDocument ..因爲這告訴你沒有什麼

相關問題