1

我正在尝试构建和填充微调器。我在填充它时遇到问题,它给了我错误“静态初始化程序的代码超出了 65535 字节限制”。我需要放入微调器的所有物品。我的微调器是这样设置的:

public class Names
{
    public static final String ALL_NAMES = "All names";
    public static final String NAMES = "NAMES";
    public static final String OBJECT = "OBJECT";
    private String names;
    private String object;

    public Names(String names, String object){
        super();
        this.names = names;
        this.object = object;
    }

    public String getNames() { return names; }
    public String getObject() { return object; }

    public static final Names[] DB = new Names[]{ 
        new Names("Albert","Person"),
        new Names("Bobby","Animal"),...

其中第二个引号中的名称是我可以从我的微调器中选择的名称,第一个引号中的名称是我选择的结果。我想做一个像 ExpandableList 这样的东西,我在其中插入一个“父字符串”,然后是那种“父字符串”的所有项目。这是一个例子:

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
    private String[] groups = { "Persons", "Dogs", "Cats" };
    private String[][] children = {
        { "Albert", "Robert", "Paul" },
        { "Yuri", "Rocky" },
        { "Lisa" },
    };

可以使用自定义微调器吗?我希望你明白我的意思并写了。感谢您的帮助。

4

1 回答 1

1

我认为这是失败的,因为您在静态初始化程序中使用了超过 65535 个字节,或者更具体地说是使用 Java 源文件输入..

 public static final Names[] DB = new Names[]{ 
    new Names("Albert","Person"),
    new Names("Bobby","Animal"),...

会在编译器/语言规范中遇到限制 - 即来自 JVM 规范

“每个非本地、非抽象方法的代码量受限于 65536 字节,具体取决于 LineNumberTable 属性 (§4.7.8) 中 Code 属性 (§4.7.3) 的 exception_table 中的索引大小,在 LocalVariableTable 属性中(第 4.7.9 节)。”

如果您将数据存储在数据库或文件中(这实际上应该是您这样做的方式,在 java 源文件中这样做真的很笨重),这可能会很好地工作 - 请注意,您即使您的代码占用的字节数少于 65536 字节,也可能会遇到 65536 字节的限制,因为这是您遇到的内部存储它的方式。

如果您将代码更改为:

 public static final Names[] DB = new Names[]{ 
    new Names("Albert","Person"),
    new Names("Bobby","Animal")};

并用它运行它(已删除其余部分)。

于 2011-10-13T15:00:29.447 回答