Java 8 ClassFormatException用于与静态方法的接口,但仅在使用断言时

Java 8 ClassFormatException用于与静态方法的接口,但仅在使用断言时,java,assert,Java,Assert,我开始得到ClassFormatExceptions,我无法解释与使用静态方法的接口相关的异常。我将其简化为以下测试用例: public interface ModifierTest { public static final int DELTA = 10; public static int increment(int value) { assert value > 0; // Problem line return value

我开始得到ClassFormatExceptions,我无法解释与使用静态方法的接口相关的异常。我将其简化为以下测试用例:

public interface ModifierTest
{
    public static final int DELTA = 10;

    public static int increment(int value)
    {
        assert value > 0; // Problem line
        return value + DELTA;
    }
}

public class ModifierExec
{
    public static void main(String[] args)
    {
        System.out.println(ModifierTest.class);
    }
}
没有increment()方法中的断言,一切都很好。但通过断言,我在运行时得到一个异常(编译很好):

这很容易解决,但我很好奇这是Java中的错误还是正确的(如果奇怪的话)行为。我找不到任何对影响字段修饰符的断言的引用


谁能告诉我发生了什么事?在EclipseKepler中运行,在JDK1.8.0_20下。

首先,Eclipse有自己的编译器,因此可能存在错误,而不是在
javac

现在,Juno是一个旧版本,它早于Eclipse对Java8的支持,Java的早期版本根本不允许在接口中使用静态方法。这就是你的报告令人困惑的地方


无论如何,您应该升级到Luna,以便在Eclipse中无缝地与Java 8协作。

javap将对该类感兴趣,并了解其中的内容。我猜assert生成了一些隐藏的字段信息,这就是阻碍验证器的原因。好主意。多年没有使用javap了。Eclipse将“静态最终布尔$assertionsDisabled”添加到类中。标准javac没有,所以我猜这会在Maven构建中正常运行。抱歉,我混淆了家庭和工作环境。是开普勒,不是朱诺。我改变了问题。有机会升级到Luna,问题就解决了。
Exception in thread "main" java.lang.ClassFormatError: Illegal field modifiers in class ModifierTest: 0x1018
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.c4.camgen.ModifierExec.main(ModifierExec.java:7)