繁体   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