gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:55 26 4
gpt4 key购买 nike

我开始遇到 ClassFormatExceptions 我无法解释与静态方法接口(interface)相关的问题。我将其删减为这个测试用例:

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() 方法中的断言,一切都很好。但是有了断言,我在运行时得到了一个异常(编译没问题):

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 中的错误还是正确的(如果奇怪)行为。我找不到任何对影响字段修饰符的断言的引用。

谁能告诉我这是怎么回事?在 Eclipse Kepler 中运行,在 jdk 1.8.0_20 下。

最佳答案

首先,Eclipse 有自己的编译器,所以可能存在错误,而不是在 javac 中。

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

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

关于Java 8 ClassFormatException 用于与静态方法的接口(interface),但仅在使用断言时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25771952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com