web-dev-qa-db-ja.com

Java Interface、AbstractClass、およびEnumの命名規則

Java for:のコード規約についてチームでこの議論を行っています。

  • interfaceFooまたはIFooまたはFooInterface

  • abstractFooまたはAbstractFoo

  • EnumsFooまたはFooEnum

私は基本的に個人的な好みを脇に置いているので:)いずれかのコンベンションをバックアップする理由は大歓迎です。

30
roundcrisis

Javaの場合:FooAbstractFoo、およびFoo-ただし、AbstractFooFooの場合もあります。

証拠:

  • Java.util.List (インターフェース)
  • Java.util.AbstractList(抽象クラ​​ス)
  • Java.util.Formatter.BigDecimalLayoutForm(列挙型)

インターフェイスの部分については、Javaコーディング規約ドキュメントの 命名規則 セクションを参照してください。ただし、列挙型と抽象クラスについては説明していません。

29
Jon Skeet

インターフェース:Foo

理由:コードは、インターフェースを処理していることを知る必要はありません。 'IFoo'を書くことはまさにそれをします。代わりに、Fooは、「Foo」が汎用であり、その背後にあるオブジェクトが「NumFoo」または「StrFoo」である可能性があることを明確にしています。コードは本当に気にする必要はありません。

抽象クラ​​ス:AbstractFoo

理由:コードがこのクラスを直接使用することはありません。他のコードで使用されるクラスを作成するには、常にこのクラスをサブクラス化します。したがって、クラスが抽象的なクラスであることは、プログラマーにとって十分に明確でなければなりません。そして、それを抽象と名付けるためのより良い方法は何でしょう! AbstractFooタイプの参照を使用する必要がある場所では、代わりにインターフェイスの使用を再検討する必要があります。 (もちろん、これはC++では不可能です)

列挙型:FooTypeまたはFooEnum。個人的には、FooTypeの方が優れています。これは、TypeがEnumよりも「現実の世界」に簡単に関連付けられるためです。

乾杯!

18
jrharshath

から 私のブログ

  • Foo-インターフェイスは最終的に概念を定義するため、最適な名前を​​付ける必要があります。
  • AbstractFoo-クラスの階層のベースとして使用することを目的とした抽象実装。
  • BaseFoo-クラスの階層のベースとして使用することを目的とした実装。必要に応じて、基本クラスを単独で使用できます。
  • DefaultFoo-一般的なユースケースの大部分に適した「デフォルト」の実装。
  • SimpleFoo-おそらく例として、またはモックとして、予期しない機能を持たない「単純な」実装。単純なPOJOは、優れた「単純な」実装になります。
  • {Descriptive} Foo-他の実装では、それらを一意にする理由を説明する必要があります。

ブログでは、他のいくつかの名前に対する理由についても説明しています。

17
JodaStephen

特別な規則はありません。

これらの種類のクラスに特別な命名規則を設定することは、基本的にハンガリアン記法(悪い種類)の形式です。それが提供する情報はすでに構文に存在し、通常はIDEで簡単に利用できます。名前にカーソルを合わせると。名前自体にそれを入れることは無意味で醜いです。

クラス名は、可能な限りクラスの役割を簡単に説明する必要があります。これcanは「自然な」命名規則につながります-非常に良い例はJava -able接尾辞(Iterable、Comparable)を持つインターフェースの命名規則です-しかし私はそれが普遍的に実施され、リスト、マップなどがそれに従わなければならなかった場合、結果を想像したくありません。

5

私の慣習:

  • インターフェース:Foo
  • abstract:FooAdaptorまたはAbstractFooまたはBaseFooに依存します
  • 列挙型:FooまたはFoos

インターフェイス名やFooInterfaceでIを使用するのは本当に嫌いです。

 interface FooInterface {

書くようなものです:

 class FooClass {

あるいは:

 abstract class AbstractFooClass {

それは単にプロリックスです。

3
dfa

私の慣習:

  • インターフェース:Foo;
  • 要約:AbstractFoo;
  • 列挙型:通常はFooですが、状況によってはFooTypeです。

IFooは非常に.Netであり、Javaではありません。 FooInterface私は使用されたのを見たことがありません。

2
cletus

私が個人的に好きなインターフェースに関して:

Fooable
2
merxbj

インターフェースについて:

IFooはおしゃべりな名前で、すぐに推測できるので、私はIFooが好きです。次に、1つのクラスに対してのみインターフェイスを実行するモジュールなどの場合、クラスは多くの場合、インターフェイスと同じ名前になります。次に、Foo extendsIFooを使用できます。そうでなければ、まあ、あなたは名前を見つけなければならないでしょう。または、FooInterfaceなどを使用します…

前述のJava.util.listはFooを使用します。異なる概念のクラスが実装しているため、これは問題ありません。したがって、すでに異なる名前(ArrayList、LinkedList…)が提案されています。本当にIListを好むかどうかはよくわかりません。ダンノ…:P

1
Kissaki

これが、IONのDEVチームで使用されている変換です。

インターフェース

interface IMyInterface

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

abstract class MyAbstract

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

enum EMyEnumeration

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

0
ION Renalyte