更改类后java.lang.NoSuchFieldError

克里斯蒂安·里斯

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

public class Foo () {
    protected String var;
}

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

这是我的两个示例类。这两个类都位于某个jar中。在这种情况下,一切工作正常(imageine它们是有用的类,并且在某些生产环境中使用)。我现在要做的就是将Varin的类型更改FooInteger

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因此,Foovar类型确实发生了变化,但Bar的想法var应该不变。因此,是的,编译类确实“知道”它们所引用的方法/变量的类型。在这种情况下,Bar仍然认为它正在寻找in中String具名,但是由于找不到,因此您会遇到此错误。我认为,编译两者都应将所有类再次放在同一页面上。varFoo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.NoSuchFieldError:INSTANCE

java.lang.NoSuchFieldError:默认

java.lang.NoSuchFieldError:反思

java.lang.NoSuchFieldError:IBM_JAVA

NullnessChecker错误:java.lang.NoSuchFieldError:释放

java.lang.NoSuchFieldError: INSTANCE - WebDriver

ScalaFx MouseEvent:java.lang.NoSuchFieldError:返回

HttpClientBuilder-java.lang.NoSuchFieldError:INSTANCE

春季:java.lang.NoSuchFieldError:IMPORT_BEAN_NAME_GENERATOR

java.lang.NoSuchFieldError的:ACCEPT_CASE_INSENSITIVE_VALUES

正在创建CA ...意外错误java.lang.NoSuchFieldError:BasicConstraints

“java.lang.NoSuchFieldError的:超级”异常 - 错误的编译器?

使用 AWS Amplify API 時的 Android java.lang.NoSuchFieldError

java.lang.NoSuchFieldError: 运行 JUnit 测试时的边缘

使用ScalaTest时出现java.lang.NoSuchFieldError

线程“主”中的异常java.lang.NoSuchFieldError:TRACE

Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError:NULL错误

GPIO - java.lang.NoSuchFieldError: device_reference

JSON解析器-java.lang.NoSuchFieldError:defaultReader

Eclipse无法启动:java.lang.NoSuchFieldError:url

java.lang.NoSuchFieldError:Apache HttpComonents和Wildfly中的实例

由第3方模块引起的java.lang.NoSuchFieldError

NoSuchFieldError Java

java中如何解决java.lang.NoSuchFieldError: RETURN_NULL_AND_BLANK

线程“主”中的异常java.lang.NoSuchFieldError:JAVA_VENDOR

适用于ssm的aws Java sdk提供了java.lang.NoSuchFieldError:SIGNING_REGION

Proguard应用程式当机(造成原因:java.lang.NoSuchFieldError:否“ Lcom / facebook / jni / HybridData)

抖动错误:java.lang.NoSuchFieldError的PREFER_HIGHEST_OR_REMOTE_VERSION_NO_FORCE_STAGING

如何解决此错误:java.lang.NoSuchFieldError:UTF_32BE?