-1

重複の可能性:
Javaで定数のクラスをどのように定義しますか?

パッケージにクラスを定義して、Cで定義されているような定数値のみを含めたいと思います。私はJavaを学習しているCプログラマーなので、おそらくそれがクラスのようなヘッダーが必要な理由です:)

この目的のために、ここに私が持っているクラスがあります:

package com.myclasses
public class defines{

public static byte final ID_1= 0x01;
public static final ID_2= 0x02;

public static String company_name="XYZ";


}

次に、同じパッケージ内の別のクラスのどこかで、次のようにこれらの定義を使用します。

byte idval = defines.ID_1;

... and so on.

私の質問は、そのような「ヘッダー」クラスに対して、それを定義する最良の方法は何ですか?

静的変数しかないので、クラスも静的に定義する必要がありますか?

アクセス修飾子はどうですか?定義されているので「公開」できると思いました。

お知らせ下さい。

4

4 に答える 4

4

このパターンは「定数クラス」パターンと呼ばれます (私はそう思います)。

それを使用する1つの方法は、それを作成することinterfaceですimplement。その後、「無料」の参照を取得します。

public interface Defines {
    static byte final ID_1= 0x01;
    static final ID_2= 0x02;
    // etc
}

public class MyClass implements Defines {
    byte idval = ID_1; // Note: No need to refer to the class "Defines" here
}

しかし、これは実際のインターフェースではない (メソッドがない) ため、ほとんどの人はこれをアンチパターンと考えています。それにもかかわらず、これは一種のクールであり、Java に慣れるための良い方法かもしれません。

「標準的な」アプローチは、「ユーティリティ クラス」を定義することです。これは、静的フィールドとメソッドのみを持ち、これらのいずれかを作成しないことを強化するプライベート コンストラクターを与えます。これはあなたがやったことです - それを続けてください。

コンパスの方向など、「同じもの」の異なる値である定数がいくつかある場合は、. の使用を強く検討してenumください。それらをよく読んでください。

于 2012-06-04T12:42:59.037 に答える
4

しないでください

それ自体に値を持つ定数はほとんどありません。それらは文脈でのみ意味があります。そのコンテキストは実際のクラス、つまりインスタンス (少なくとも 1 つ) を持つクラスです。そのクラスで定数を宣言します。

修飾子については、可能な限りスコープを縮小します。宣言されているクラス内でのみ使用される場合はプライベート、クラスを使用する人が定数も必要とする場合はパブリックです。

1 つのクラスで同じ型の複数の定数を宣言する場合は、列挙型が慣習に意味があるかどうかを考えてください。

はい、定数は静的でなければなりません。

于 2012-06-04T12:43:57.567 に答える
1

最終クラスを使用する

eg : public final class defines {

         // private constructor     
         private defines() {
         }
     }

定数は次のように定義する必要があります

public static final <type> constantName = <value>;

列挙型は、それらの間に何らかの関係がある定数がある場合に使用する必要があるため、このシナリオでは列挙型をお勧めしません。

このようなユーティリティ クラスを持つことは、プロジェクト全体でアクセスする必要がある定数を定義するためにプロジェクトで使用するアプローチです。

その特定のクラスでのみ定数が必要な場合は、クラス自体でそれらを定義することが最善の解決策になります。例えば:

private static final <type> constantName = <value>;
于 2012-06-04T12:48:25.560 に答える
0

Java でインターフェイスを使用して、すべての定数を定義するだけです。

public interface Const {

String GOVERNMENT = "Government";

String PUBLIC = "Public";

...

}

クラスも使えます。

于 2012-06-04T12:43:07.260 に答える