Entry tags:
Why java lambda is bugged.
К примеру, у нас есть интерфейс для вызова функций ResultSet:
public interface FieldProcessor<T> {
T get(ResultSet rs, int number) throws SQLException;
}
К нему мы добавим еще один интерфейс, без дополнительных параметров:
public interface Field<T> {
T getValue(ResultSet rs) throws SQLException;
}
Теперь попытаемся сгенерировать ламбду для первого интерфейса (весь лишний код я, понятное дело, опустил):
public class QueryRunner {
public static <T> T getResult(Connection con, String query, FieldProcessor<T> processor) throws SQLException {
return null;
}
public static <T> T getResult(Connection con, String query, Field<T> field) throws SQLException {
return null;
}
public static Integer getIntegerResult(Connection con, String query) throws SQLException {
return getResult(con, query, ResultSet::getInt);
}
}
Казалось бы, ResultSet::getInt(int columnIndex) соответствует первому интерфейсу и никак иначе. Но компилятор джавы почему-то считает иначе. Bugged!