有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java例外。lang.nosuchfield更改类后出错

我今天遇到了一个异常,并设法消除了错误。首先,让我给你一个示例代码

public class Foo () {
    protected String var;
}

public class Bar extends Foo () {
    public String isVarNull() {
        return (this.var == null);
    }
}

这是我的两个例子。这两个类都位于某个jar中。在这个场景中,一切都很好(imageine它们是有用的类,在一些生产环境中使用)。 我现在所做的就是将Foo中的Var类型更改为Integer

public class Foo () {
    protected Integer var;
}

之后,我编译了类Foo,并用新的类文件替换Jar中的旧类文件。当我现在尝试访问字段var(在类Bar的方法isVarNull())时,我得到了以下异常:

Caused by: java.lang.NoSuchFieldError: test/Bar.var at test.Bar.isVarNull(Bar.java:6)

据我所知,它与类的字节码有关。编译类是否“知道”代码中使用的方法/变量的类型?在这种情况下,Bar“知道”应该返回什么类型的var并因此抛出错误,因为方法的返回类型已更改? 如果能给我一个详细的答复,我将不胜感激

亲切的问候


共 (0) 个答案