Читаю книгу Шилдта Java 8, главу "Ссылки на статические методы".
Вопрос про класс MyStringOps - видно, что объявлен класс, а не интерфейс, но в книге почему-то написан интерфейс. Это опечатка? Или чего-то недопонимаю?
// Продемонстрировать ссылку на статический метод
// Функциональный интерфейс для операций с символьными строками
interface StringFunc {
String func (String n);
}
// в этом интерфейсе определяется статический метод strReverse ()
class MyStringOps {
// Статический метод, изменяющий порядок
// следования символов в строке
static String strReverse (String str) {
String result = " " ;
int i;
for (i = str.length()- 1; i >= О; i--)
result += str.charAt (i) ;
return result;
}
}
class MethodRefDemo {
// В этом методе функциональный интерфейс указывается в качестве
// типа первого его параметра . Следовательно, ему может быть передан
// любой экземпляр этого интерфейса , включая и ссылку на ме тод
static StringstringOp (StringFunc sf, String s) {
return sf.func(s) ;
public static void main (String args[])
{
String inS tr = "Лямбда- выражения повышают эффективность Java ";
String out Str;
// Здесь ссылка на метод strRaverse () передается методу stringOp()
outStr = stringOp ( MyStringOps::strReverse, inStr);
System.out.println (" Иcxoднaя строка : "+ inStr);
System.out.println ("Oбpaщeннaя строка : "+ outStr);
}
}
Ответ
Да, действительно, опечатка. В оригинале Java The Complete Reference (Ninth Edition)
Комментариев нет:
Отправить комментарий