因为你放入接口中的任何域都自动是static和final的,所以接口就成为了一种很便捷的用来创建常量组的工具。在Java SE5之前,这是产生于C或C++中的enum具有相同效果的类型的唯一途径。因此在Java SE5之前的代码中,你可能会看到下面这样的代码:
package interfaces.classprocessor;
//Using interface to create groups of constants.
public interface Month {
int JANUARY = 1, FEBRUARY = 2, MARCH = 3,
APRIL = 4, MAY = 5, JUNE = 6, JULY = 7,
AUGUST = 8, SEPTEMBER = 9, OCTOBER = 10,
NOVEMBER = 11, DECEMBER = 12;
}
请注意,Java中标识具有常量初始值的static final时,会使用大写字母的风格(在一个标识符中用下划线来分割多个单词)。接口中的域自动是public的,所以没有显式的指明这一点。
有了JavaSE5,你就可以使用更强大而灵活的enum关键字了,因此使用接口来定义常量显得就没什么意义了。
在接口中定义的域不能是“空final”的,但是可以被非常量表达式初始化。例如:
package interfaces.classprocessor;
import java.util.Random;
public interface RandVals {
Random rand = new Random(47);
int RANDOM_INT = rand.nextInt();
long RANDOM_LONG =rand.nextLong();
}
package interfaces.classprocessor;
import java.io.StringReader;
public class TestRandVals {
public static void main(String[] args){
System.out.println(RandVals.RANDOM_INT);
System.out.println(RandVals.RANDOM_LONG);
}
}
需要记住的一点是:这些域不是接口的一部分,他们的值被存储在该接口的静态存储区内。