0

メソッド(および程度は低いが変数)の適切な命名規則を探しています。メタプログラミングまたはリフレクションフレームワークにファクトリクラスがあり、メソッドがJavaのプリミティブ型に関連しているとします。

// dumb example
public class WrapperFactory {
    // create byte wrapper
    public MyWrapper byte(byte param) { ... }

    // create int wrapper
    public MyWrapper int(int param) { ... }
}

読みやすさの観点から、メソッド名は適度に短くしたいと思います。示されている例とは異なり、異なるタイプのメソッドシグネチャは同じである可能性があるため、多数のオーバーロードを持つcreate(...)-メソッドだけを持つことは不可能です。

メソッドのコンテキストから(結局、それらはWrapperFactoryにあります)、それらがWrapperを生成することは明らかです。したがって、byteWrapper()(またはさらに詳細なcreateByteWrapper())のようなものは完全に冗長であるように見えます。

短く簡潔なメソッド名の提案はありますか?


編集:一般的な傾向は、オーバーロードのあるメソッドが最も一般的であり、ほとんどのファクトリメソッドで機能するようですが、現在、異なる動作のラッパーを作成する同一のシグネチャを持つ4つのcreateXXXWrapper(...)があります(ただし、同じ一般的なタイプ)。したがって、すべてのタイプで一貫性を保つために、私は現在、prefixXXX()の名前付けの提案を支持しています。どのプレフィックスが最適か(ラップは私のお気に入りの1つではありません。機能的にラッパーではない、さまざまなオブジェクトを作成する他のファクトリがあります)。したがって、新しいX(...)のような一般的なプレフィックスを付けたり、X(...)を作成したり、X(...)を取得したりします。

4

4 に答える 4

3

メソッド名は名詞ではなく動詞にする必要があります。

したがって、一般的なものが必要な場合は、wrap()

メソッドの命名

メソッド名は任意の正当な識別子にすることができますが、コード規則によってメソッド名が制限されます。慣例により、メソッド名は小文字の動詞、または小文字の動詞で始まり、その後に形容詞、名詞などが続く複数語の名前にする必要があります。複数語の名前では、2 番目以降の各単語の最初の文字大文字にする必要があります。ここではいくつかの例を示します。
run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty

ソース: Java™ チュートリアル> Java 言語の学習>クラス>メソッドの定義


そして、メソッド名の再利用について。動作しますが、注意が必要です。次に例を示します。

多くのコンストラクタを持つオブジェクト:

public class Wrapper{
    private final String type;
    public Wrapper(final byte inner){ type = "byte"; }
    public Wrapper(final short inner){ type = "short"; }
    public Wrapper(final int inner){ type = "int"; }
    public Wrapper(final char inner){ type = "char"; }
    public Wrapper(final Object inner){ type = "Object"; }
    public Wrapper(final float inner){ type = "float"; }
    public Wrapper(final double inner){ type = "double"; }
    public Wrapper(final boolean inner){ type = "boolean"; }
    public String getType(){ return type; }
}

そのようなオブジェクトを取得するいくつかのファクトリ メソッド:

public static Wrapper wrap(final byte inner){ return new Wrapper(inner); }
public static Wrapper wrap(final int inner){ return new Wrapper(inner); }
public static Wrapper wrap(final short inner){ return new Wrapper(inner); }
public static Wrapper wrap(final Object inner){ return new Wrapper(inner); }
public static Wrapper wrap(final boolean inner){ return new Wrapper(inner); }
public static Wrapper wrap(final char inner){ return new Wrapper(inner); }
public static Wrapper wrap(final float inner){ return new Wrapper(inner); }
public static Wrapper wrap(final double inner){ return new Wrapper(inner); }

テストコード:

public static void main(final String[] args){
    final byte byteValue = (byte) 0x12;
    final short shortValue = (short) 10;
    System.out.println(wrap(byteValue).getType());
    System.out.println(wrap(10).getType());
    System.out.println(wrap(shortValue).getType());
    System.out.println(wrap("").getType());
    System.out.println(wrap(true).getType());
    System.out.println(wrap('a').getType());
    System.out.println(wrap(13.1f).getType());
    System.out.println(wrap(13.1d).getType());
}

出力 (予想どおり):

byte
int
short
Object
boolean
char
float
double

于 2010-11-26T10:27:27.420 に答える
2

この場合、wrapByteand wrapInt、または単にオーバーロードされcreateたメソッドをお勧めします。

于 2010-11-26T10:33:32.677 に答える
1

プレフィックス「from」を使用するのはどうですか?

public class WrapperFactory {
    // create byte wrapper
    public MyWrapper fromByte(byte param) { ... }

    // create int wrapper
    public MyWrapper fromInt(int param) { ... }
}

これは、標準の Java 命名規則に従っていませんが、直感的に理解しやすいかもしれません。

于 2010-11-26T10:47:40.690 に答える
0

あなたの場合、方法newWrapper(byte...), newWrapper(int...)はより良いでしょう。またはcreate、またはそのメソッドが何をするかを一言で説明する何か。

于 2010-11-26T10:32:41.927 に答える