Switch-on-strings Java7 - архив переписки JSR 334

237
26 ноября 2016, 19:20

Здравствуйте. Может ли мне кто-нибудь объяснить небольшой момент в переписки, касательно критики и предложений данного нововведедения switch-on-strings в 7 пакете Жабы, в 334 coin project 334 JSR ?

процитирую:

Now that we plan to have closures, do we still need strings-in-switch?
Won't a string-to-function map be about as fast (though maybe less
convenient)? I don't know what the use cases are for
strings-in-switch, but the feature already felt a bit low-benefit to
me, and seems even more so now with closures.

ссылка на источник

Что такое понятие closures, и почему в случае его реализации, задается вопрос, существует ли необходимость в данной опции-свичире ? Какая между ними связь, объясните для непонимающего. И так же на счет вопроса не будет ли string-to-function map не менее быстрым.

Может кто небольшое введение сделать для понимания данного коммента ? Буду благодарен.

Answer 1

Могу ошибаться, но мне кажется, здесь речь идет о замыканиях, т.е. лямбдах.

Пример, где switch может быть заменен лямбда-функцией.

public static String caseOnString(String str) {
    switch (str) {
        case "hello":
            return "world";
        case "bye":
            return "country";
        default:
            return "";
    }
}
public static String mapOnString(String str) {
    Function<String, String> map = s -> {
        if (s.equals("hello"))
            return "world";
        if (s.equals("bye"))
            return "country";
        return "";
    };
    return map.apply(str);
}
Answer 2

Думаю, имели в виду следующее: если у нас есть переменная String str, то вместо

switch (str) {
    case "one":
        System.out.println(1);
        break;
    case "two":
        System.out.println(2);
        break;
    default:
        System.out.println("?");
}

предлагали писать что-то вроде такого (closures - это замыкания, а в случае java - лямбды, хоть они и не полноценные замыкания):

Map<String, Runnable> switchMap = new HashMap<>();
switchMap.put("one", () -> System.out.println(1));
switchMap.put("two", () -> System.out.println(2));
switchMap.getOrDefault(str, () -> System.out.println("?")).run();
READ ALSO
Симуляция движения в 2D игре, Android canvas

Симуляция движения в 2D игре, Android canvas

Пишу простенький раннер, движение объекта (того, кто бежит) симулирую сдвигом на определенное расстояние картинки на бэкграунде (фона)

233
Движение по лабиринту.

Движение по лабиринту.

Делаю лабиринтДвижение осуществляется по фрейму, в зависимости от значения в массиве map, где 1 - можно двигаться, 2 - стена

323
Неверная кодировка MySQL

Неверная кодировка MySQL

Выводит непонятные символы, не могу понять где и как нужно менять кодировку

222
SSH подключение к Android девайсу

SSH подключение к Android девайсу

Здравствуйте, возможно ли разработать приложение для Android которое бы создавало сессию ssh и к которой можно было подключиться по средствам...

311