【发布时间】:2017-05-04 06:00:19
【问题描述】:
使用 lambda 遍历字符串数组时出现跟随错误。
java.lang.NoClassDefFoundError: com.twsz.app.ivybox.alarm.CreateOrUpdateAlarmActivity$$Lambda$1
at com.twsz.app.ivybox.alarm.CreateOrUpdateAlarmActivity.initView(CreateOrUpdateAlarmActivity.java:143)
at com.twsz.app.ivybox.alarm.CreateOrUpdateAlarmActivity.onCreate(CreateOrUpdateAlarmActivity.java:73)
这是我的代码。我知道传统方式遍历字符串数组是可以的,但是为什么在我使用 lambda 时会发生这种情况。
String[] days = dayOfWeek.split(",");
Arrays.asList(days).forEach(day->{
int index = Integer.valueOf(day) -1;
checkBoxList.get(index).setChecked(true);
});//where happens NoClassDefFoundError
我的 build.gradle 文件
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.twsz.app.ivybox"
minSdkVersion 14
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dataBinding {
enabled = true
}
}
感谢您的帮助。
【问题讨论】:
-
@SachinGupta String like "1,2,3,4,5,6,7"
-
lamda 需要 java8 或更高版本。据我所知android还不支持java8。
-
@Cyrus 请说明您是如何实现 java 8 功能的,以下任何一种:a) retrolambda b) jack 编译器 c) 新的 android studio 2.4 预览
-
Retrolambda 在内部将 lambda 函数转换为匿名类。目前,您的代码
Arrays.asList(days).forEach(day->{ int index = Integer.valueOf(day) -1; checkBoxList.get(index).setChecked(true); })仅受新的 android api 可能 24 及更高版本的支持。