所以我有这个接口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可能尚未初始化
但是界面中没有任何最终字段。谁能告诉我为什么会这样,以及如何解决它?请假设界面中存在所有必要且正确的导入。
答案 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