请查看以下情况: ( PS:我不是试图解决代码太大的编译器错误,因为有多种优雅的方法可以做到这一点。)
我们正在" Code too large
"我们其中一个类的编译错误。该类包含public String fields
标签ID和值。我们使用此类进行本地化,除了英语,所有其他语言标签都来自.properties
个文件。
我们收到此错误的原因是因为我们有一个static
块,其中使用反射我们将HashMap
填充所有public
fields
及其值。字段数已经消失,我们正在越过64K
方法的static
限制。最可行的解决方案之一是将.properties files
用于英文标签。
问题已解决,以下是建议的解决方案:
为了便于讨论,我将称之为class MyLabels
。我们为名为super class
的{{1}}定义了MyLabels
。现在我们在MyLabelsExt
而不是super class
添加标签。通过运行一些测试,我们确认我们在MyLabels
中初始化的地图包含MyLables class
和MyLabels
中的所有字段。
问题: 为什么当我们开始使用超类时,传递了64K限制错误。
谢谢, 和Manish。
答案 0 :(得分:1)
说实话,这似乎是一个可怕的解决方案。你使用一个哈希映射来保存对字段(?)的引用听起来也很有问题。
IMO您应该将消息ID和消息之间的映射保存为普通值。例如,像这样:
Map<String, Map<String, String>> lang_id_message;
String text = message.get("en").get("please.pay.the.developer");
此类地图可以从文件填充,如属性文件,您不会达到此类平台限制。消息的定义也将更易于管理;例如,如果它们位于属性文件中,则很容易为它们分配错误代码,但当它们位于Java源文件中时非常烦人。