0

現在、このような定数のクラスを定義しています

public final class DataContainer{

    public static final String x1="a";    
    public static final String x2="b";
     ...
    public static final String xn="z";    

}

& 次のようにアクセスするだけでこれらを使用できます。DataContainer.x1

しかし、ここで、この定数ファイルの 2 つの実装を定義する必要があります ( DataContainer1& DataContainer2) & DataContainer1.x1から DataContainer2.x1.

このようなデザインを実装するにはどうすればよいですか?

4

1 に答える 1

1

static finalおそらく、定数の実装から離れるべきです。

そもそも static/final 定数を持つことの主な利点は、コンパイラがコンパイル時にこれらの値にアクセスできるため、さまざまな最適化を実行できることです。

ただし、実行時に定数の実際の値を交換できるようにする必要があるため、その利点はいずれにせよなくなります。厳密に言えば、値は実際には可変であるため、厳密な意味での定数ではなくなったと主張することができます。

私はおそらく、値とそのさまざまな実装へのマップのようなインターフェースを持つ、非常にシンプルで古典的な OO 構造を採用するでしょう。

public interface Constants {
    public String get(String value);
}

(実際のところ、 ajava.util.Mapまたは toに切り替えると、java.util.Properties探していることが既に行われている可能性があります。)

もちろん、そのインターフェースの個々の実装で値を として定義したい場合もありますstatic final

静的アクセスが大好きな場合は、Factory パターンを使用して、実行時に定数の実際のインスタンスを取得できます。これにより、同僚の間で認定された Java の第一人者のように見えることにもなります ;-)

于 2012-11-01T08:21:35.913 に答える