microcell: (Default)
2017-04-18 03:45 pm
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!