我有一个使用以下消息错误的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
但如果我在我的eclipse IDE中测试一切正常。
我正在使用Spring 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();
答案 0 :(得分:4)
看起来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
变量的类型相匹配。在这种代码中,您不需要也不应该有警告抑制。