如何规避",;“方法太大”;Java编译中的错误?

如何规避",;“方法太大”;Java编译中的错误?,java,bigloo,Java,Bigloo,我有一个用bigloo scheme函数语言编写的解析器,我需要将它编译成java类。整个解析器都是作为单个函数编写的。不幸的是,这会导致JVM编译器抛出“Method too larg”警告,然后给出“far label in localvar”错误。有什么可能的方法可以避免这个错误吗?我在某个地方读到关于DontCompileHugeMethods选项的文章,它有效吗?拆分函数对我来说似乎不是一个可行的选择:( 有什么可能的方法可以避免这个错误吗 嗯,这个编译器错误的根本原因是字节码文件的格

我有一个用bigloo scheme函数语言编写的解析器,我需要将它编译成java类。整个解析器都是作为单个函数编写的。不幸的是,这会导致JVM编译器抛出“Method too larg”警告,然后给出“far label in localvar”错误。有什么可能的方法可以避免这个错误吗?我在某个地方读到关于DontCompileHugeMethods选项的文章,它有效吗?拆分函数对我来说似乎不是一个可行的选择:(

有什么可能的方法可以避免这个错误吗

嗯,这个编译器错误的根本原因是字节码文件的格式有硬限制。在这种情况下,问题是单个方法最多可以包含65536字节字节的字节码(请参阅)


唯一的解决方法是拆分方法。

在相关操作中拆分方法或单独拆分实用程序


嗯,情况有点不同 这里,该方法只包含一个 单函数调用。现在 函数有一个巨大的参数列表( 整个解析器都是!!)。所以我 没有关于如何分割的线索

分裂这种野兽的方法可能是:

  • 为参数定义数据持有者对象(根据数据模型的本体将参数集放入对象中)
  • 在自己的上下文中构建这些数据持有者对象
  • 将参数对象传递给函数

快速且肮脏:在函数开始时,将所有参数分配给同名的类变量(必须重命名参数),然后开始将函数分割成若干部分,并将这些部分放入函数中。这应确保函数基本上以相同的语义运行


但是,这不会产生漂亮的代码!

与其问
编译HugeMethods
是否有效,不如自己尝试一下。无论如何,拥有庞大的方法是一种非常糟糕的做法。尝试创建一些帮助函数,不仅可以解决问题,而且可以使代码更具可读性和可维护性。在hu中,庞大的方法是一种糟糕的做法人工编写的代码,但这似乎与生成的代码一致,对吗?生成的解析器?在这种情况下,请查看解析器生成器是否有一个命令行选项,以避免生成非常大的方法。嗯,这里的情况有点不同,该方法只包含一个函数调用。现在该函数有一个巨大的参数列表(实际上是整个解析器!!)。所以我没有关于如何拆分的线索!!你肯定可以将大量的参数列表传递给其他方法,不是吗?