почему javac в скрипте ant build с несовместимыми типами - PullRequest
1 голос
/ 02 апреля 2011

У меня есть скрипт сборки ant, который выдает ошибку со следующим сообщением.

javac incompatible types by ant build

ProductDao.java:41: incompatible types
found   : java.lang.Object
required: java.util.List<com.sample.dto.Product>
            listProductsIds = jdbc.execute("{ call find_Product_id(?,?,?,?,?) }",
                                        ^
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

Но если я проверю его в своей IDE затмения, все будет хорошо.JdbcTemplate и вот как я определил свой вызов.

    @SuppressWarnings("unchecked")
    public List<Product> getProducts(final String parent, final String tagDesc,
            final int pageSize, final int pageNo, 
            final String userId, final int maxrowcount) {

        List<Product> listProductIds = new ArrayList<Product>();

        listProductIds = jdbc.execute("{ call find_Product_id(?,?,?,?,?) }",
                new CallableStatementCallback() {

                    public Object doInCallableStatement(
                            CallableStatement callableStatement)
                            throws SQLException, DataAccessException {
                        callableStatement.setString(1, parent);
                        callableStatement.setString(2, tagDesc);
                        callableStatement.setInt(3, pageSize);
                        callableStatement.setInt(4, pageNo);
                        callableStatement.setString(5, userId);
                        callableStatement.execute();

1 Ответ

4 голосов
/ 02 апреля 2011

Похоже, что компилятор Eclipse чрезмерно прощает здесь и компилирует то, чего не должен делать, тогда как javac (используется Ant) строже. Метод jdbc.execute, используемый здесь, возвращает Object, который нельзя присвоить List.

Вы подавили предупреждения в своем коде, что тоже не помогает, поэтому вы фактически игнорируете сообщения, в которых говорится, что случилось.

Вам нужно использовать общие шаблоны, чтобы помочь вам использовать правильный тип возврата:

List<Product> listProductIds = jdbc.execute(
    "{ call find_Product_id(?,?,?,?,?) }",
    new CallableStatementCallback<List<Product>>() {
        public List<Product> doInCallableStatement(CallableStatement callableStatement) throws SQLException, DataAccessException {
            ....
        }
    }
);

Обратите внимание, что сигнатура универсального типа CallableStatementCallback соответствует типу возврата doInCallableStatement и типу переменной listProductIds. Вам не нужно и не должно быть предупреждений о предупреждениях в такого рода коде.

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