Java中interface中定義變量都是"public static final" 類型的, 也就是常量, 因此很多人在interface定義常用的常量,除此之外單獨定義一個class來保存常量也是一個選擇,對於這兩種方式哪一種好呢?
下面是功能等同的兩種定義常量的方式:
public final class Constants { private Constants() {} public static final Integer TIME_OUT = 1000; }
public interface Constants { Integer TIME_OUT = 1000; }
類定義常量和接口定義常量:
1.類定義常量, 需要定義成final且定義一個private的構造方法, 這樣做是為了不讓其他類繼承, 禁止實例化此類,
調用時直接以"類.常量"的方式調用.
2.接口中定義的"變量", 其實就是常量, 接口中的"變量"默認都是 "public static final"類型, 即為常量,
因此接口可以省略"public static final"而直接寫成 "type variable".
3.用如上的類定義常量, 不能實例化也不能被繼承, 看起了完美無缺;
4.接口定義常量, 雖不能實例化, 確可以被其他類實現;
因此有這么一種設計模式"The constant interface pattern". 所謂的"常量接口模式", 就是其他類要使用接口中定義的常量,
就實現該接口. 我認為這是對接口的爛用. 接口中定義的常量應為所有類頻繁使用的常量, 但並不是每個類都使用了接口中定義的所有常量,
因而導入了不必要的常量到這個類中, 並且導入后這個類的子類也會基礎導入的常量, 這樣會導致混亂, 應當避免此種用法.
5.在interface和class中定義相同的常量, interface生成的class文件比class生成的class文件會更小, 而且更簡潔, 效率更高
所以我更喜歡把常量定義在接口中。
