代码之家  ›  专栏  ›  技术社区  ›  Ohunter

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

  •  1
  • Ohunter  · 技术社区  · 7 年前

    所以我有了这个接口queryandretrieval,我想强制实现它的每个类都有一些变量和一些非常简单的方法,但是如果我试图在第5行定义一个vaiable

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

    日食告诉我

    空白最终字段CONN可能尚未初始化。

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

    2 回复  |  直到 7 年前
        1
  •  2
  •   Stephen P    7 年前

    在爪哇安 界面 指定所有实现者必须响应的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 ,但仍然不能在接口中声明成员变量,因此这些默认方法仍然不能使用“抽象”成员。

        2
  •  1
  •   Ivan    7 年前

    在接口中,所有属性都是 public static final 默认情况下。 所以如果你不使用 conn 属性,移除它即可。

    如果使用它,则可能需要在代码中包含静态初始化块才能将值设置为 康恩