这是代码片段,在Eclipse Kelper SR2中编码并运行,安装了Java 8支持更新(从此处检索:click me):
public class InterfaceSwitchTest {
public enum Enums {
FOO,
BAR;
}
public interface A {
// The below method causes the error.
// Comment out or delete this method and this class will compile.
public default void switchStatement(final Enums x) {
switch (x) {
case FOO:
break;
case BAR:
break;
}
}
// The if statement version of the above.
public default void ifStatement(final Enums x) {
if (x.equals(Enums.FOO))
return;
if (x.equals(Enums.BAR))
return;
}
}
public static class AImplemented implements A {
public AImplemented() {
}
}
public static void main(final String[] args) {
AImplemented instance = new AImplemented();
System.out.print("Yay, no exeptions!");
}
}
在不注释掉方法“switchStatement()”的情况下执行上述操作会在运行时产生以下异常:
Exception in thread "main" java.lang.ClassFormatError: Illegal field modifiers in class InterfaceSwitchTest$A: 0x100A
预计会出现上述异常吗?当然,问题的解决方案是使用if语句替换。我只是想知道为什么它会导致ClassFormatError?
如果有所期待,我非常希望听到解释。
谢谢!
注意:我已经使用java 8二进制文件设置了我的eclipse。我的lambda表达式和其他防御方法分散在我的项目中,它们运行得很好。