Можно ли использовать лямбды в этом случае (интерфейс с одним методом)? - PullRequest
1 голос
/ 17 мая 2019

У меня есть следующий код:

DialogInterface.OnClickListener closeOnOkClickListener = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which){
                case DialogInterface.BUTTON_POSITIVE:
                    finish();
                    break;
            }
        }
    };

И я пытаюсь преобразовать это в лямбда-выражение, но я не могу этого сделать.

Возможно ли это?

Как?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Объяснение

Это возможно, если в интерфейсе есть только один (не по умолчанию) метод, который используется в вашем случае.

Вот лямбда-вариант:

DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {
    switch (which) {
        case DialogInterface.BUTTON_POSITIVE:
        finish();
        break;
    }
};

Обратите внимание, что вы могли бы немного улучшить свой код, поскольку вы используете только один из switch случаев:

DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {
    if (which.equals(DialogInterface.BUTTON_POSITIVE)) {
        finish();
    }
};

Примечание

В идеале интерфейс должен иметь @FunctionalInterface в качестве аннотации для документирования такого использования.

1 голос
/ 17 мая 2019

Это возможно. Каждый interface, который только что получил один метод не по умолчанию, является FunctionalInterface. Аннотация предназначена только для того, чтобы компилятор удостоверился, что interface только что получил один метод не по умолчанию, в противном случае вы получите ошибку компилятора.

Попробуйте это:

DialogInterface.OnClickListener closeOnOkClickListener = (dialog, which) -> {
    switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            finish();
            break;
    }
};

Проверьте это для более подробного объяснения аннотации FunctionalInterface.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...