我們有我們的團隊關於編碼規範的討論for Java的:Java接口,抽象類和枚舉命名約定
interface
:Foo
或IFoo
或FooInterface
?abstract
:Foo
或AbstractFoo
?Enums
:Foo
或FooEnum
?
我基本上試圖把我的個人喜好拋在一邊:)所以備份一個或其他公約的理由是非常受歡迎的。
我們有我們的團隊關於編碼規範的討論for Java的:Java接口,抽象類和枚舉命名約定
interface
:Foo
或IFoo
或FooInterface
?
abstract
:Foo
或AbstractFoo
?
Enums
:Foo
或FooEnum
?
我基本上試圖把我的個人喜好拋在一邊:)所以備份一個或其他公約的理由是非常受歡迎的。
在Java:Foo
,AbstractFoo
和Foo
- 雖然AbstractFoo
可能只是Foo
。
證據:
java.util.List
(接口)java.util.AbstractList
(抽象類)java.util.Formatter.BigDecimalLayoutForm
(枚舉)對於接口部分,請參見Java的Naming Conventions部分編碼公約文件。它雖然沒有談論枚舉和抽象類。
我約定:
Foo
;AbstractFoo
;Foo
但在某些情況下FooType
。IFoo
非常.Net,而不是Java。 FooInterface
我從來沒有見過使用。
IFoo也在整個Eclipse代碼庫中使用,這是非常Java的,但他們可以很好地從.NET中選擇它 – 2009-06-17 14:23:11
雖然我指出它在Eclipse中使用,但我並不推薦它。 ,我更喜歡Foo到IFoo – 2009-06-17 14:26:12
另外,儘管Eclipse是用Java編寫的,但並不意味着他們使用Java風格 – Cephalopod 2011-08-17 11:48:29
我約定:
我真的不喜歡在接口名稱中使用I,甚至不喜歡使用FooInt erface:
interface FooInterface {
是喜歡寫作:
class FooClass {
甚至:
abstract class AbstractFooClass {
那簡直就是冗長。
接口:富
原因:你的代碼必須並不需要知道他們正在處理的接口。寫'IFoo'就是這樣。相反,Foo明確表示'Foo'是泛型的,它後面的對象可能是'NumFoo'或'StrFoo'。代碼真的不需要關心。
抽象類:AbstractFoo
原因:你的代碼永遠不會直接使用這個類。你將總是繼承這個類來創建其他代碼使用的任何類。所以程序員必須清楚該類是抽象類。還有什麼更好的方法來命名它摘要! 地方,你需要使用類型AbstractFoo的引用,你應該重新考慮使用接口代替。 (當然,這在C++中是不可能的)
枚舉:FooType或FooEnum。就個人而言,FooType更好,因爲Type更容易與Enum所做的「真實世界」聯繫起來。
乾杯!
無特殊約定。
對於這些類的特殊命名約定基本上是匈牙利符號的一種形式(不好的類型):它給你的信息已經存在於語法中,並且通常可以由IDE容易地獲得,例如,當你將鼠標懸停在名字上時。把它放在名字本身是毫無意義和醜陋的。
類的名字應該簡單地描述類的角色以及可能的。這可以導致「自然」的命名約定 - 一個很好的例子是與後綴-able(可迭代,可比)命名接口的Java約定 - 但我並不想想象的結果,如果它得到普遍執行,列表,地圖等不得不遵循它。
關於接口:
我喜歡IFoo的,因爲它是一個會說話的名字,告訴你這是一個inferface的時候了。 二,模塊等如果你爲一個類做一個接口,那麼這個類通常和接口名稱相同。然後你可以使用Foo extends IFoo。否則,你必須找到一個名字。或者使用FooInterface或任何...
的java.util.List作爲規定使用美孚。這是沒有問題的,因爲具有不同概念的類實現它,因此已經建議了不同的名稱(ArrayList,LinkedList ...)。 我不太確定我是否真的更喜歡那裏的IList。不知道啊:P
對於我本人來說就像接口:
Fooable
從my blog:
博客還討論了對其他一些名稱的原因。
這裏是我的開發團隊在離子convetion。
接口
interface IMyInterface
:::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::
abstract class MyAbstract
::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
enum EMyEnumeration
::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::
據我所知,接口有一個JavaBeans命名約定,規定它們應該被命名爲形容詞,通常以`able`結尾。所以如果`Foo`是一個動作,那麼該接口應該被命名爲`Fooable`。 – 2013-08-12 10:36:38
@RudiKershaw:並不總是......我的經驗也是隨着時間的推移而減少。反例包括「CharSequence」,所有集合,各種DOM接口。 – 2013-08-12 10:49:16
JavaBeans的約定是唯一真正適用於對插件可重用軟件組件編寫的代碼,所以很多公約似乎在很大程度上忽略了標準的目的。但我喜歡使用`Fooable`,因爲它只是幫助我一眼就區分普通類。 – 2013-08-12 10:52:49