首页 > 解决方案 > 空白的最终字段 conn 可能尚未在非最终成员上初始化

问题描述

所以我有这个接口 QueryAndRetrieval 并且我想强制实现它的每个类都有一些变量以及一些非常简单的方法,但是如果我尝试将一个变量定义为第 5 行的那个

public interface QueryAndRetrieval {

    public String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
    public String JDBC_URL = "jdbc:derby:CompanyDB;create=true";
    public static Connection conn;

    public boolean containsEntry(String TableName, Object key);

    public static Connection connect() throws SQLException {
        return DriverManager.getConnection(JDBC_URL);
    }
}

Eclipse 告诉我

空白的最终字段 conn 可能尚未初始化

但是界面中没有最终字段。谁能告诉我为什么会发生这种情况以及如何解决?请假设界面中存在所有必要且正确的导入。

标签: javaeclipseinterface

解决方案


在 Java 中,接口指定了所有实现者必须响应的 API。他们如何做到这一点取决于实现,因此在实现者上强制一个字段是没有意义的。

如果你想提供一些易于实现的支持,方法是使用接口和抽象基类——例如

public interface QueryAndRetrieval {

    public String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
    public String JDBC_URL = "jdbc:derby:CompanyDB;create=true";

    public boolean containsEntry(String TableName, Object key);

    public abstract Connection connect() throws SQLException;
}

public abstract class QueryAndRetrievalBase {
    public Connection conn;

    public Connection connect() throws SQLException {
        return DriverManager.getConnection(QueryAndRetrieval.JDBC_URL);
    }
}

public class MyQueryImpl extends QueryAndRetrievalBase { ... }

请注意,从 Java 8 开始,接口也可以提供默认方法,但您仍然不能在接口中声明成员变量,因此这些默认方法仍然不能使用“抽象”成员。


推荐阅读