最终局部变量 dc 无法赋值,因为它是在封闭类型中定义的

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();

}

我只是想知道如何解决这个问题。我还在“状态”变量上收到错误“在封闭范围中定义的局部变量状态必须是最终的或有效的最终”。我相信这是因为我正在使用我发现的一些旧源代码,但是,我似乎找不到解决方案。


慕尼黑8549860
浏览 97回答 1
1回答

catspeake

对于 Java,您不能将任何内容分配给在声明中标记为 except 的变量final。另一方面,您需要将这些变量设为最终变量才能在此闭包中使用。JS之后可能会感到沮丧。因此,您可能需要对这段特定代码执行的操作是将变量声明移至闭包中,并删除final修饰符。如果您仍然需要从外部访问它们,您可能会定义一个实现Runnable接口的类,并通过 get 方法使这些变量成为该类实例的字段。另外,您真的需要这段代码来异步运行吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java