2

嗨,我是 RetroLambda 的新手。现在我将它与 Runnable、OnClickListener 等一起使用。问题是:是否可以将 RetroLambda 与 onTextChangeListener 等类一起使用?例如如何 lambda this

etmessage.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (count > 0) {
                okmenubutton.setEnabled(true);
                okmenubutton.getIcon().setAlpha(255);
            } else {
                okmenubutton.setEnabled(false);
                okmenubutton.getIcon().setAlpha(130);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

谢谢你。

4

1 回答 1

4

Retrolambda 将 Java 8 功能移植到以前的 JVM 版本。当您使用 lambda 而不是Runnable它时,称为自动 SAM 转换,其中 SAM 代表单一抽象方法。这意味着,如果你有一个接口或一个抽象类,它只有一个抽象方法,你可以用具有相同签名的 lambda 替换它。TextWatcher如您所见,它具有三个抽象方法,并且不能用 lambda 替换。

如果您想使用 lambda,您可以为每个TextWatcher方法定义单方法接口并实现将接受这些接口的辅助方法,每个方法一个,创建一个TextWatcher将调用委托给接口的方法,然后添加TextWatcherto TextView

于 2016-04-03T21:38:28.230 回答