NoClassDefFoundError with Java 8 方法参考
NoClassDefFoundError with Java 8 method reference
我 运行 Android 在 Travis CI. The following test case invokes a helper method per method reference 上的模拟器上进行仪器测试:
@Test
public void testGetLowEmissionZones_worksAtAll() {
// ...
lowEmissionZone.childZones.forEach(this::testChildZone);
// ...
}
private void testChildZone(@NonNull ChildZone childZone) {
// ...
}
当 Travis CI executes 这个测试 失败 NoClassDefFoundError
:
ContentProviderTest > testGetLowEmissionZones_worksAtAll[test(AVD) - 4.3.1] FAILED
java.lang.NoClassDefFoundError: -$$Lambda$ContentProviderTest$He_xH9TsDaN0tZU8EqFP1CuQyAM
at ContentProviderTest.testLowEmissionZone(ContentProviderTest.java:151)
如果我更改方法调用,则会出现无错误:
@Test
public void testGetLowEmissionZones_worksAtAll() {
// ...
for (ChildZone childZone : lowEmissionZone.childZones) {
testChildZone(childZone);
}
// ...
}
openjdk8和oraclejdk8我都试过了,都失败了。
如何继续使用方法引用?
您遇到此问题的原因可能是 forEach(Consumer<?> consumer)
在 Jelly Bean 中不可用。
如您所见,测试在 4.3.1 上失败。确保这与 AVD 的 API 级别相关。确保代码在 API 级别 24 之后正常工作。
我 运行 Android 在 Travis CI. The following test case invokes a helper method per method reference 上的模拟器上进行仪器测试:
@Test
public void testGetLowEmissionZones_worksAtAll() {
// ...
lowEmissionZone.childZones.forEach(this::testChildZone);
// ...
}
private void testChildZone(@NonNull ChildZone childZone) {
// ...
}
当 Travis CI executes 这个测试 失败 NoClassDefFoundError
:
ContentProviderTest > testGetLowEmissionZones_worksAtAll[test(AVD) - 4.3.1] FAILED
java.lang.NoClassDefFoundError: -$$Lambda$ContentProviderTest$He_xH9TsDaN0tZU8EqFP1CuQyAM
at ContentProviderTest.testLowEmissionZone(ContentProviderTest.java:151)
如果我更改方法调用,则会出现无错误:
@Test
public void testGetLowEmissionZones_worksAtAll() {
// ...
for (ChildZone childZone : lowEmissionZone.childZones) {
testChildZone(childZone);
}
// ...
}
openjdk8和oraclejdk8我都试过了,都失败了。
如何继续使用方法引用?
您遇到此问题的原因可能是 forEach(Consumer<?> consumer)
在 Jelly Bean 中不可用。
如您所见,测试在 4.3.1 上失败。确保这与 AVD 的 API 级别相关。确保代码在 API 级别 24 之后正常工作。