繁体   English   中英

在Android中使用Lambda表达式

[英]Using Lambda expression in android

当我像这样使用Lambda时,它会报告

无法解析方法getAction()

BroadcastReceiver refreshDataReceiver = (context,intent)-> {
        if (AppConstants.REFRESH_DATA_ACTION.equals(intent.getAction())) {
            taskInfos.clear();
            taskInfos.addAll(mTaskDao.queryMyTasks());
            mAdapter.notifyDataSetChanged();
        }
};

虽然我以正常方式编写此代码,但效果很好,为什么?

 BroadcastReceiver refreshDataReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (AppConstants.REFRESH_DATA_ACTION.equals(intent
                .getAction())) {
            taskInfos.clear();
            taskInfos.addAll(mTaskDao.queryMyTasks());
            mAdapter.notifyDataSetChanged();
        }
    }
};

BroadcastReceiver不是替换lambda的有效候选者。 Lambda只能替换单一方法接口。 Java Lambda快速入门文档 -

Lambda表达式是Java SE 8中包含的一项新的重要功能。它们提供了一种简洁明了的方式来使用表达式表示一个方法接口。

BroadcastReceiver既不是接口,也不是只有一个方法。

将Retrolambda添加到您的Gradle构建配置中

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:1.4.0'
    classpath 'me.tatarka:gradle-retrolambda:3.2.0'
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

将源和目标兼容性添加到Java 8,并在app / build.gradle文件中应用新的插件。

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc2"

defaultConfig {
    applicationId "com.vogella.android.retrolambda"
    minSdkVersion 22
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}



dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
} 

然后使用lambda表达式。 链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM