Пустое последнее поле conn, возможно, не было инициализировано для не финального члена - PullRequest
0 голосов
/ 06 июня 2018

Итак, у меня есть этот интерфейс 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 голосов
/ 07 июня 2018

В 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 интерфейс также может предоставлять методы по умолчанию , но вы все еще не можете объявить переменные-члены в интерфейсе, поэтому эти методы по умолчанию по-прежнему не могут использовать "абстрактные" члены.

0 голосов
/ 06 июня 2018

В интерфейсе все свойства public static final по умолчанию.Поэтому, если вы не используете свойство conn, просто удалите его.

Если вы используете его, вам может понадобиться статический блок инициализации в вашем коде, чтобы установить значение conn

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...