Post Page Advertisement [Top]

インターフェイスは、そのクラスのオブジェクトを
参照することができる型(type)の役割をします。

インターフェイスを実装するとint、stringなどの型を
そのままオーバーライドすることになります。

普通は、この目的のためにオントフェイスを使用します。

しかし、その中にはそうでないインターフェースもあります。

public Interface PhysicalConstants {

static final double AVOGADROS_NUMBER = 6.02214199e23;

static final double BOLTZMANN_CONSTANT = 1.3806503e-23;

static final double ELECTRON_MASS = 9.10938188e-31;
}  

これは定数のインターフェースパターンです。

利便のために使用することがあります。

このようなインタフェースの使用は、


public class Main {
    public static void main(String[] args) {
        System.out.println(PhysicalConstants.AVOGADROS_NUMBER);
    }
}

このように使う必要があるコードを

public class Main implements PhysicalConstants  {
    public static void main(String[] args) {
        System.out.println(AVOGADROS_NUMBER);
    }
}

このように使うことができるようにしてくれます。

しかし、この方法はクラスの中身が公開されます。
カプセル化の原則を毀損しています。

それに加えて、インターフェイスは型の実装という一つの約束です。

このことを知らない一般のユーザーはこの実装を型の実装として
把握する可能性が高いです。このような混乱は避けた方がいいです。

泣きっ面に蜂で、Mainクラスを継承するすべてのサブクラスが
実装形態に影響を受けることになります。




みんなで仲良く「汚染!」されるはめになります。

このためこいう使い方は遠因する必要があります。

定数の定義を使いたい場合は

Java 1.5から、より良い方法があります。

public class PhysicalConstants {
    private PhysicalConstants() {}
static final double AVOGADROS_NUMBER = 6.02214199e23;
static final double BOLTZMANN_CONSTANT = 1.3806503e-23;
static final double ELECTRON_MASS = 9.10938188e-31;
} 

このような定数クラスを定義した後

使用するクラスにこのように、静的インポートをしましょう。

import static com.effectivejava.science.PhysicalConstants;


このような使い方はインターフェイスを使わないけれど

簡単な定数の使用ができます。

この規則をまとめると

「インターフェイスを型の実装以外の目的で使うことは遠因してください。」

になります。


댓글 없음:

댓글 쓰기

Bottom Ad [Post Page]

| Designed by Colorlib