インターフェイス自体に定数を格納したくないという調査を行っていたので、列挙型などの代替手段を探していましたが、別のアプローチとして、インターフェイスを使用する代わりに、finalを使用することがわかりました。プライベートコンストラクターを持つクラス。(クラスのインスタンス化またはサブクラス化を不可能にし、非静的機能/データが含まれていないという強力なメッセージを送信します。その場合、静的インポートを利用することもできます。
Public final class KittenConstants
{
private KittenConstants() {}
public static final String KITTEN_SOUND = "meow";
public static final double KITTEN_CUTENESS_FACTOR = 1;
}
2つの独立したもの。1:継承を悪用する代わりに静的インポートを使用します。2:定数リポジトリが必要な場合は、インターフェースではなく最終クラスにします。このアプローチが正しいことをアドバイスしてください..!!
定数インターフェイスのいくつかの落とし穴を回避するには(人々がそれを実装するのを防ぐことができないため)、プライベートコンストラクターを持つ適切なクラスを優先する必要があります(例:ウィキペディアから借用):
public final class Constants {
private Constants() {
// restrict instantiation
}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
また、定数を完全に修飾せずに(つまり、クラス名のプレフィックスを付けずに)定数にアクセスするには、静的インポートを使用します(Java 5以降)。
import static Constants.PLANCK_CONSTANT;
import static Constants.PI;
public class Calculations {
public double getReducedPlanckConstant() {
return PLANCK_CONSTANT / (2 * PI);
}
}
列挙型でも同じことができる方法を示してください..!