【问题标题】:Decompiled code causes "Cannot reference a field before it is defined"反编译代码导致“在定义之前无法引用字段”
【发布时间】:2016-07-15 05:13:14
【问题描述】:

所以我反编译了一个 jar 并将所有内容导入到 eclipse 中,但是我到处都是这些非常奇怪的错误。

当我将鼠标悬停在第 279 行的错误上时,它会显示

在定义之前不能引用字段

即使它在上面的行中定义得非常清楚,我什至在评论中有一个错误,说它无法解析变量,即使它被注释掉了。

【问题讨论】:

  • file/2/3/4 声明在哪里?
  • 问题很可能是所有这些文件在赋值之前都没有声明。
  • 好吧,反编译器通常不会让一切都完美,所以我猜这只是你必须处理的事情之一。

标签: java eclipse compiler-errors


【解决方案1】:

Java 在编译期间按顺序解析字段,因此您不能让字段以任意顺序相互引用。您的代码 sn-p 似乎没有这个问题,但是如果稍后在文件中声明了字段,那将是原因。

有时 Eclipse 只是不同步;如果您没有发现任何问题,请尝试 refreshing 该项目或 rebuilding 它。

【讨论】:

    【解决方案2】:

    问题很可能是所有这些文件在为它们赋值之前都没有被声明。

    例如 file = new File("params"); 应该是:File file = new File("params");

    【讨论】:

    • 我实际上只是稍微研究了一下,并且文件在类中的进一步声明正确。
    • 它们必须在调用之前声明,否则会导致错误。
    • 但这没有意义,反编译器只是随机选择所有声明并将它们移动到不同的位置?
    • @Zacx 反编译器并不总是完美地完成他们的工作。他们尝试基本上对代码进行逆向工程。有时效果很好,有时效果不佳。
    • @Zacx 反编译代码充其量只是基于字节码中的信息的猜测。字节码会丢失原始来源的信息,因此它永远不可能完美。如果您可以通过一个简单的示例复制此错误,请将其报告为反编译器的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多