在Java 8的defender方法中使用switch语句的ClassFormateError

时间:2014-04-02 21:35:12

标签: java eclipse

这是代码片段,在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表达式和其他防御方法分散在我的项目中,它们运行得很好。

0 个答案:

没有答案