簡體   English   中英

更新舊代碼,但現在有前向聲明錯誤

[英]Updating old code, but it now has forward declaration errors

我不太精通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['']; 看起來如下

碼

如果我沒記錯的話,像這樣的靜態構造函數只會將自身插入正常類初始化的順序中。 因此,在您的情況下,聲明map1,然后運行靜態代碼塊,然后聲明map。

嘗試將map2的聲明移到靜態代碼塊上方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM