更新旧代码,但它现在有前向声明错误

时间:2016-07-29 04:28:26

标签: java server base64 minecraft decoder

我不是很精通Java,我刚刚开始。然而,需要更新别人的工作以供我自己使用(当然是私下)。一旦我开始更新插件(这是专门用于Spigot Minecraft服务器),我遇到了大量的草率代码和许多错误。这个让我难以理解为Java场景的新手。

该代码适用于Base64解码器。

private static final char[] map1 = new char[64];

static { int i = 0;
    for (char c = 'A'; c <= 'Z'; c = (char)(c + '\001')) map1[(i++)] = c;
    for (char c = 'a'; c <= 'z'; c = (char)(c + '\001')) map1[(i++)] = c;
    for (char c = '0'; c <= '9'; c = (char)(c + '\001')) map1[(i++)] = c;
    map1[(i++)] = '+';map1[(i++)] = '/';

    map2 = new byte['<nonunicodechar>']; // It appears as a square in IntelliJ, assuming it's not unicode (see below)

    for (int i = 0; i < map2.length; i++) map2[i] = -1;
    for (int i = 0; i < 64; i++) { map2[map1[i]] = ((byte)i);
  }
}

public static final byte[] map2;

抛出的问题是map2是非法的前向引用,并且'i'已经在范围内定义。

byte[''];的内容如下

Code

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,像这样的静态构造函数只会将其自身插入到普通类初始化的顺序中。因此,在您的情况下,声明map1,然后运行静态代码块,然后声明map。

尝试将map2的声明移到静态代码块之上。