Java 空白最终字段CONN可能未在非最终成员上初始化。

Java 空白最终字段CONN可能未在非最终成员上初始化。,java,eclipse,interface,Java,Eclipse,Interface,因此,我有这个接口QueryAndRetrieval,我想强制实现它的每个类都有一些变量和一些非常简单的方法,但是如果我试图定义一个vaiable作为第5行的变量 public interface QueryAndRetrieval { public String DRIVER = "org.apache.derby.jdbc.EmbeddedDriver"; public String JDBC_URL = "jdbc:derby:CompanyDB;create=true"

因此,我有这个接口QueryAndRetrieval,我想强制实现它的每个类都有一些变量和一些非常简单的方法,但是如果我试图定义一个vaiable作为第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可能尚未初始化


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

在接口中,默认情况下,所有属性均为
公共静态最终属性。
因此,如果不使用
conn
属性,只需将其删除即可

如果您正在使用它,您可能需要在代码中设置静态初始化块,以便在Java中将值设置为
conn

,接口指定所有实现者都必须响应的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开始,接口也可以提供,但您仍然不能在接口中声明成员变量,因此这些默认方法仍然不能使用“抽象”成员。

QueryAndRetrieval
是一个接口,任何接口中的所有字段都隐式地
公共静态final
。。。“接口的要点是指定公共API。接口没有状态。“…请注意可能重复的问题