首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于与静态方法接口的Java 8 ClassFormatException,但仅在使用断言时才适用

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

Stack Overflow用户
提问于 2014-09-10 17:53:59
回答 1查看 950关注 0票数 3

我开始获得ClassFormatExceptions,我无法解释与静态方法的接口相关。我将其简化为这个测试用例:

代码语言:javascript
复制
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);
    }
}

如果不使用增量()方法中的断言,一切都很好。但是,通过断言,我在运行时得到了一个异常(编译是可以的):

代码语言:javascript
复制
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)

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

有人能告诉我发生了什么事吗?运行在1.8.0_20下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 18:00:22

首先,Eclipse有自己的编译器,因此可能存在一个bug,而不是在javac中。

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

无论如何,您应该升级到露娜,以便在Eclipse中无缝地使用Java 8。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25771952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档