Лямбда-упражнения - PullRequest
       12

Лямбда-упражнения

0 голосов
/ 29 апреля 2018

Я делаю несколько тестов Java OCA. Я не понимаю ответ для этого упражнения:

interface Climb {
   boolean isTooHigh(int height, int limit);
}

public class Lambdas {
    public static void main(String[] args) {
        check((h,l) -> l, 5);
    }

    private static void check(Climb climb, int height) {
        if (climb.isTooHigh(height, 10))
            System.out.println("Too");
        else
            System.out.println("ok");
    }
}

Я не понимаю, является ли l "l" или "1", потому что написание немного непонятно. Я также не понял логику этого упражнения.

Можете ли вы сказать мне, что необходимо для исправления формы: l или 1? Можете ли вы объяснить мне это упражнение?

Большое спасибо!

1 Ответ

0 голосов
/ 29 апреля 2018

Вот что происходит:

(h,l) -> l - это лямбда, которая принимает h и l и возвращает l. В соответствии с interface Climb, h и l аргументами являются int, а возвращаемое l должно быть bool; похоже, что неявное преобразование типов.

Следовательно, строка check((h,l) -> l, 5); в порядке и принимает аргументы правильного типа (Climb , int).

(h,l) -> l просто делает: «давайте забудем о h, и if l != 0, return true else if l == 0 return false».

PS: если бы это было 1, ответ был бы постоянно true

Исправленная версия

interface Climb {
    boolean isTooHigh(int height, int limit);
}
public class Main {
    public static void main(String[] args) {
        check((h,l) -> h>l, 5);
    }
    private static void check(Climb climb, int height) {
            System.out.println(climb.isTooHigh(height, 10) ? "Too":"ok" );
    }
}
...