空白的最终字段conn可能尚未在非最终成员上初始化

时间:2018-06-06 20:18:26

标签: java eclipse interface

所以我有这个接口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可能尚未初始化

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

2 个答案:

答案 0 :(得分:2)

在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开始,界面也可以提供default methods,但您仍然无法在界面中声明成员变量,因此这些默认方法仍然无法使用&# 34;抽象"成员。

答案 1 :(得分:1)

在界面中,所有属性默认为public static final。 因此,如果您不使用conn属性,请将其删除。

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