В Java 8 ссылки на методы выполняются с помощью оператора ::
.
Пример
// Class that provides the functionality via it static method
public class AddableUtil {
public static int addThemUp(int i1, int i2){
return i1+i2;
}
}
// Test class
public class AddableTest {
// Lambda expression using static method on a separate class
IAddable addableViaMethodReference = AddableUtil::addThemUp;
...
}
Вы можете видеть, что addableViaMethodReference
теперь действует как псевдоним AddableUtil::addThemUp
. Таким образом, addableViaMethodReference()
выполнит то же действие, что и AddableUtil.addThemUp()
, и вернет то же значение.
Почему они решили ввести новый оператор вместо использования существующего? Я имею в виду, выполните функцию, когда имя функции заканчивается на ()
и возвращает ссылку на функцию, если нет конечного ()
.
Выполнение метода
AddableUtil.addThemUp();
Ссылка на метод
AddableUtil.addThemUp;
Разве это не было бы намного проще и интуитивно понятным? AFAIK, AddableUtil.addThemUp
в настоящее время (Java 7) не используется для других целей и генерирует ошибку компиляции. Почему бы не использовать эту возможность вместо создания совершенно нового оператора?