4

retrolambdaを使用して、Android でラムダ式を使用しようとしています。以下のコードでは、インターフェースであるリスナーを追加する必要があります。

 public interface LoginUserInterface {

        void onLoginSuccess(LoginResponseEntity login);

        void onLoginFail(ServerResponse sr);
    }

コード

 private void makeLoginRequest(LoginRequestEntity loginRequestEntity) {
        new LoginUserService(loginRequestEntity)
                .setListener(
                        login -> loginSuccess(login),
                        sr -> loginFail(sr))
                .execute();
    }

 private void loginSuccess(LoginResponseEntity login) {
         //TODO loginSuccess
    }

 private void loginFail(ServerResponse sr) {
        //TODO loginFail
    }

しかし、Android Studio は赤いloginSuccess( login )loginFail( sr )間違いとしてマークし、「LoginResponseEntity を適用できません」 および「ServerResponse を適用できません」というメッセージを表示します。ログイン) . この表現の何が問題なのかを理解するのを手伝ってください。

4

2 に答える 2

5

ラムダはFunctional インターフェイスでのみ使用できます。これは、インターフェイスでメソッドを1 つだけ指定する必要があることを意味します。

それについて覚えておくには (単純に、匿名クラスの代わりにラムダを使用できるようにするため)、@FunctionalInterfaceインターフェイスに注釈を付けるのが最善です。

@FunctionalInterface
public interface LoginUserInterface {
    LoginResult login(...)
}

そして、の値でディスパッチしますLoginResult

于 2015-11-29T23:57:44.940 に答える