Well, that's not really true. Consider this class:
All I did was change "interface" to "class", and add "public final static" (which was all true implicitly for an interface, but must be stated explicitly for a class). Now the code compiles with no problems. The compiler
can be sure that someVar is definitely assigned - it just looks at all static initializers, to make sure that the variable gets assigned. Much like it would look at the contents of constructors if we were talking about a final instance field (though there are some differences).
Pradeepta: some might tell you that interfaces are not supposed to contain any implementation details, and a static initializer is an implementation detail. This is sort of true, but there are other ways to put implementation details inside interfaces (in variable initializers and in nested classes).
I think the real answer here is that the
Java language designers were just inconsistent on this point. They sort of didn't want implementation details, but they didn't completely block them. Oh well. For better or worse, that's the way they set up the language, and I think it's unlikely to change now. I mean, some change is possible, but it's generally a lot of work convincing enough people to support a particular change. And this particular issue doesn't really seem to bother anyone.