2009-06-17 45 views
28

我們有我們的團隊關於編碼規範的討論for Java的:Java接口,抽象類和枚舉命名約定

  • interfaceFooIFooFooInterface

  • abstractFooAbstractFoo

  • EnumsFooFooEnum

我基本上試圖把我的個人喜好拋在一邊:)所以備份一個或其他公約的理由是非常受歡迎的。

回答

28

在Java:FooAbstractFooFoo - 雖然AbstractFoo可能只是Foo

證據:

  • java.util.List(接口)
  • java.util.AbstractList(抽象類)
  • java.util.Formatter.BigDecimalLayoutForm(枚舉)

對於接口部分,請參見Java的Naming Conventions部分編碼公約文件。它雖然沒有談論枚舉和抽象類。

+1

據我所知,接口有一個JavaBeans命名約定,規定它們應該被命名爲形容詞,通常以`able`結尾。所以如果`Foo`是一個動作,那麼該接口應該被命名爲`Fooable`。 – 2013-08-12 10:36:38

+0

@RudiKershaw:並不總是......我的經驗也是隨着時間的推移而減少。反例包括「CharSequence」,所有集合,各種DOM接口。 – 2013-08-12 10:49:16

+0

JavaBeans的約定是唯一真正適用於對插件可重用軟件組件編寫的代碼,所以很多公約似乎在很大程度上忽略了標準的目的。但我喜歡使用`Fooable`,因爲它只是幫助我一眼就區分普通類。 – 2013-08-12 10:52:49

2

我約定:

  • 接口:Foo;
  • 摘要:AbstractFoo;
  • 枚舉:通常Foo但在某些情況下FooType

IFoo非常.Net,而不是Java。 FooInterface我從來沒有見過使用。

+0

IFoo也在整個Eclipse代碼庫中使用,這是非常Java的,但他們可以很好地從.NET中選擇它 – 2009-06-17 14:23:11

+1

雖然我指出它在Eclipse中使用,但我並不推薦它。 ,我更喜歡Foo到IFoo – 2009-06-17 14:26:12

+0

另外,儘管Eclipse是用Java編寫的,但並不意味着他們使用Java風格 – Cephalopod 2011-08-17 11:48:29

3

我約定:

  • 接口:富
  • 摘要:這取決於FooAdaptor或AbstractFoo或BaseFoo
  • 枚舉:富或FOOS

我真的不喜歡在接口名稱中使用I,甚至不喜歡使用FooInt erface:

interface FooInterface { 

是喜歡寫作:

class FooClass { 

甚至:

abstract class AbstractFooClass { 

那簡直就是冗長。

17

接口:富

原因:你的代碼必須並不需要知道他們正在處理的接口。寫'IFoo'就是這樣。相反,Foo明確表示'Foo'是泛型的,它後面的對象可能是'NumFoo'或'StrFoo'。代碼真的不需要關心。

抽象類:AbstractFoo

原因:你的代碼永遠不會直接使用這個類。你將總是繼承這個類來創建其他代碼使用的任何類。所以程序員必須清楚該類是抽象類。還有什麼更好的方法來命名它摘要! 地方,你需要使用類型AbstractFoo的引用,你應該重新考慮使用接口代替。 (當然,這在C++中是不可能的)

枚舉:FooType或FooEnum。就個人而言,FooType更好,因爲Type更容易與Enum所做的「真實世界」聯繫起來。

乾杯!

5

無特殊約定。

對於這些類的特殊命名約定基本上是匈牙利符號的一種形式(不好的類型):它給你的信息已經存在於語法中,並且通常可以由IDE容易地獲得,例如,當你將鼠標懸停在名字上時。把它放在名字本身是毫無意義和醜陋的。

類的名字應該簡單地描述類的角色以及可能的。這可以導致「自然」的命名約定 - 一個很好的例子是與後綴-able(可迭代,可比)命名接口的Java約定 - 但我並不想想象的結果,如果它得到普遍執行,列表,地圖等不得不遵循它。

1

關於接口:

我喜歡IFoo的,因爲它是一個會說話的名字,告訴你這是一個inferface的時候了。 二,模塊等如果你爲一個類做一個接口,那麼這個類通常和接口名稱相同。然後你可以使用Foo extends IFoo。否則,你必須找到一個名字。或者使用FooInterface或任何...

的java.util.List作爲規定使用美孚。這是沒有問題的,因爲具有不同概念的類實現它,因此已經建議了不同的名稱(ArrayList,LinkedList ...)。 我不太確定我是否真的更喜歡那裏的IList。不知道啊:P

2

對於我本人來說就像接口:

Fooable 
13

my blog

  • 美孚 - 該接口最終定義的概念,所以它應該有最好的名字。
  • AbstractFoo - 旨在用作類層次結構基礎的抽象實現。
  • BaseFoo - 旨在用作類層次結構基礎的實現,其中基類可以在需要時自行使用。
  • DefaultFoo - 適用於大多數典型用例的「默認」實現。
  • SimpleFoo - 一個「簡單」的實現沒有意想不到的功能,可能作爲一個例子或作爲模擬。一個簡單的POJO將是一個很好的「簡單」實現。
  • {}描述符 - 其他的實現應該說明是什麼使他們唯一的。

博客還討論了對其他一些名稱的原因。

0

這裏是我的開發團隊在離子convetion。

接口

interface IMyInterface 

:::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::

abstract class MyAbstract 

::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

enum EMyEnumeration 

::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::