Что означает данное выражение “ Which lambda can replace MySecret class?”

84
14 июня 2021, 20:50

"Which lambda can replace MySecret class?"

    interface Secret{
      String test(String a, String b);
}
class MySecret implements Secret {
  public String test(String a, String b) {
         return a + b;
  }
}
  • A) caller((a, b) -> a + b);
  • B) caller((String a, b) -> a + b);
  • C) caller((String a, String b) -> a + b);
  • D) caller((a, b), a + b);
  • E) caller((String a, b), String b), a + b);
  • F) caller(String a, String b), a + b);

Мой вопрос не в том, как данное выражение переводится, а в том, что конкретно требуется сделать? И еще один вопрос, который не является отдельным вопросом, а основывается именно на только что заданном вопросе - откуда взялся caller(...) ?

А так дополнительно скажу - я знаю что лямбда работают через функциональные интерфейсы, но тут мне кажется, что вместо функционального интерфейса требуется функциональный класс, который в свою очередь как показано в тесте - имплементирует функциональный интерфейс. (Если я неправильно трактую содержимое теста, пожалуйста - скорректируйте)

Answer 1
interface Secret {
  String test(String a, String b);
}
public class Test {
  static void caller(Secret secret) {
    System.out.println(secret.test("test", "-shmest"));
  }
  static void main(String[] args) {
    caller((a, b) -> a + b);
  }
}
Answer 2

Исходя из здравого смысла, всё, что нужно в этом вопросе это понимать - какая лямбда подходит и при этом синтаксически верна. Вот очень похожий вопрос из книги "Oracle Certified Professional Java SE 8 Programmer II Study Guide" (Jeanne Boyarsky, Scott Selikoff)

Which lambda can replace the MySecret class to return the same value? (Choose all that apply.)
public interface Secret {
  String magic(double d);
}
public class MySecret implements Secret {
  public String magic(double d) {
    return "Poof";
  }
}
A. caller((e) -> "Poof");
B. caller((e) -> {"Poof"});
C. caller((e) -> { String e = ""; "Poof" });
D. caller((e) -> { String e = ""; return "Poof"; });
E. caller((e) -> { String e = ""; return "Poof" });
F. caller((e) -> { String f = ""; return "Poof"; });

В приведённом изначально вопросе уж очень странные варианты ответов. По поводу корректного синтаксиса, всё написано в документации. Если коротко, то в целом лямбда выглядит так:

(параметры) -> {тело}

при этом (по памяти)

  • если параметр один и тип не указан, то скобки можно опустить;
  • если параметров несколько, то скобки обязательны;
  • если тип указан, то скобки обязательны;
  • если тип указан для хотя бы одного параметра, то должен быть указан для всех;
  • если одно выражение в теле, то фигурные скобки, слово return, точку с запятой можно опустить (можно, но не обязательно), но только всё сразу;
  • если в теле несколько выражений, то должны присутствовать и фигурные скобки, и слово return, и точка с запятой после каждого выражений, в том числе после return
READ ALSO
SugarORM не использует готовую Database

SugarORM не использует готовую Database

Пробую использовать готовую базу данных с SugarORM, копирую DB в нужную папку getApplicationContext()getDatabasePath("data

97
Верификация полей формы в модальном окне bootstrap vue

Верификация полей формы в модальном окне bootstrap vue

Есть небольшой vue проектИспользую bootstrap-vue

96
Запись новых значений в JSON файл node.js

Запись новых значений в JSON файл node.js

Мне нужно добавление новых значений в JSON файл и сохранять его (и ничего большего, я много искал но всё выглядело не нужным) Просто хотелось...

96