我今天遇到了一个异常,设法消除了错误。首先,让我给您一个示例代码。
public class Foo () {
protected String var;
}
public class Bar extends Foo () {
public String isVarNull() {
return (this.var == null);
}
}
这是我的两个示例类。这两个类都位于某个jar中。在这种情况下,一切工作正常(imageine它们是有用的类,并且在某些生产环境中使用)。我现在要做的就是将Var
in的类型更改Foo
为Integer
。
public class Foo () {
protected Integer var;
}
之后,我编译了类,Foo
并用新的替换了Jar中的旧Class-File。当我现在尝试访问该字段var
(在isVarNull()
类的方法中Bar
)时,出现此异常:
由以下原因引起的:java.lang.NoSuchFieldError:test / Bar.isVarNull(Bar.java:6)处的test / Bar.var
据我所知,它与该类的字节码有关Bar
。编译后的类是否“知道”代码中使用的方法/变量的类型?在这种情况下,由于方法的返回类型已更改,Bar
“知道”var
应返回哪种类型并因此引发错误?我非常感谢您提供详细的答案!
亲切的问候
我认为这里的最佳答案可能会有所帮助:NoSuchFieldError Java
但是不要过多地依赖链接,通常的想法是您可能只编译了Foo
。因此,Foo
的var
类型确实发生了变化,但Bar
的想法var
应该不变。因此,是的,编译类确实“知道”它们所引用的方法/变量的类型。在这种情况下,Bar
仍然认为它正在寻找in中的String
具名,但是由于找不到,因此您会遇到此错误。我认为,编译两者都应将所有类再次放在同一页面上。var
Foo
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句