簡體   English   中英

最終的局部變量 dc 無法賦值,因為它是在封閉類型中定義的

[英]The final local variable dc cannot be assigned, since it is defined in an enclosing type

public static void createTable() {
    final DatabaseConnection dc;
    final Connection con;
    final String que;
    Statement state;
    new Thread(() -> {
        dc = new DatabaseConnection("check_table_exists");
        con = dc.con;
        que = "CREATE TABLE IF NOT EXISTS " + DatabaseConnection.TABLE + " (id INT(11) NOT NULL AUTO_INCREMENT,itemId INT(200), itemName VARCHAR(200), amount INT(200),uuid VARCHAR(200), timestamp BIGINT(200), PRIMARY KEY (id))";
        try {
            state = con.createStatement();
            state.execute(que);
            state.close();
            dc.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
            dc.close();
        }
    }).start();
}

我只是想知道如何解決這個問題。 我還在“狀態”變量上收到錯誤“在封閉 scope 中定義的局部變量 state 必須是最終或有效最終”。 我相信這是因為我使用了一些我找到的舊源代碼,但是,我似乎找不到解決方案。

使用 Java,您不能將任何內容分配給標記為final的變量,除非在聲明中。 另一方面,您需要這些變量是最終的才能在此閉包中使用。 這在 JS 之后可能會讓人感到沮喪。 因此,您可能需要對這段特定代碼做的是將變量聲明移動到閉包中,刪除final修飾符。 如果您仍然需要從外部訪問它們,您可能會定義一個實現Runnable接口的 class,並通過 get 方法使這些變量成為此 class 實例的字段。

另外,你真的需要這段代碼異步運行嗎?

暫無
暫無

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

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