当Java 8问世时,我很失望地看到他们仍然不允许在接口中使用静态初始化器。我认为理由是它实际上就像在接口中添加一个私有静态方法,在Java 8中不允许这样做(因为它们都必须是公共的)。
https://bugs.openjdk.java.net/browse/JDK-8072872
然而,在Java 9中,我们将获得私有静态接口方法。任何人都可以想到为什么这种改变不应该包括向接口添加静态初始化器的能力吗?
在Java 8中,我们有这样的场景:
public interface TestStatic
{
int NUM=initNum();
static //Not legal in Java 8
{
NUM=1;
}
static int initNum() //Legal in Java 8
{
return 1;
}
}
因此,如果我被允许在Java 9中使initNum()
私有,那么允许静态初始化器也没有意义吗?
我没有加入Oracle Java团队,但我希望Oracle的某个人能够看到这一点,并且可以解决这个问题。