问题标签 [retrolambda]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4537 浏览

java - 任务“:app:compileRetrolambdaDebug”执行失败

我使用 retrolambda 很长时间,但突然他停止了我所有项目的工作。我重新安装了jdk,但没有帮助。我在谷歌没有找到答案,我希望你能帮助我。我的 gradle 文件:build.gradle(应用程序):

build.gradle(项目):

摇篮堆栈跟踪:

0 投票
0 回答
109 浏览

android - Retrolambda/多模块混淆

我正在使用retrolambda,一些测试让我很困惑。

我的理解是:

  • 使用 retrolambda 我可以使用一些 java8 语言功能(例如 lambdas),但不能使用 java 8 类:例如,没有任何其他库,我不能使用 java8 流:HashSet<>.stream()不可用
  • 我用 java-8 特性(lambdas)编写我的代码。源代码被翻译成 java8-class 文件,然后 retrolambda 启动并将 java8-class 文件转换为 java7-class 文件,这些文件可以在较旧的 Android 版本(例如 Android 6)上执行

所以,我建立了一个小型测试项目来测试我的假设,有些事情我不确定。我希望有人能澄清一下。这是我的源代码的标签,我将参考。

  1. 在多模块 android 应用程序(一个 android 模块和一个纯 java 模块)中,我们必须将retrolambda gradle 插件应用于所有想要使用 java8 功能的模块(app 和 java)
    • 首先 java 模块会被 javac 编译成 java8-class 文件,retrolambda 会将它们转换成 java7 并构建一个 jar
    • 那么 app 模块将按照与 java 模块相同的方式编译:但现在我们得到的是 apk 而不是 jar:一切都是 java7 并且可以愉快地在 Android 6 上使用
  2. 在我的源代码中,我有一些单元测试,它们故意使用不应该工作的 java8 代码:我调用HashSet<>.stream()
    1. Android Studio 和模拟器:所有测试都有效
      • 我猜Android Studio & Emulators 甚至根本不使用retrolambda,只是将所有东西编译并运行到java8
      • 有没有办法改变它?:例如,如果任何测试已经发现了这些问题,那就太好了
    2. Gradle 命令行构建:
      • gradle clean app:test: 单元测试工作
      • gradle clean java:test: 单元测试失败
    3. 我不知道为什么 app 模块中的测试有效而 java 模块中的测试失败:为什么会这样?
  3. 正如预期的那样,在装有 Android 6 的真实设备上,一切都崩溃了
0 投票
0 回答
318 浏览

android - 使用 Jack 和 Retrolambda 运行应用程序时出现问题

我最近在使用 Retrolambda 时尝试在我的应用程序中调试时遇到了很多问题,因为我想在我的 Gradle 中包含 Jack 以进行调试。

因此,我一直在经历这个错误,但我仍然没有找到解决它的方法。

我检查了不同的帖子以寻找解决方案:

Android Studio:Gradle - 构建失败 - 任务“:dexDebug”执行失败

使用 jack 时,Lambda 表达式在 Android 中因 IncompatibleClassChangeError 而崩溃

建议为运行 jack 的 Gradle 守护进程使用更大的堆

但是没有一个解决方案可以解决我的问题。现在我的 Gradle 看起来像:

我的appgradle

0 投票
1 回答
78 浏览

android - Android RetroLamda 实现问题

我是在 Android 开发中使用 RetroLamda 的新手。我了解到,选择方法取决于参数类型。我有如下界面:

现在共同实现:

如何在 RetroLamda 表达式中处理两种方法具有相同输入类型的这种情况?

0 投票
2 回答
4055 浏览

java - Retrolambda 有什么用?

Retrolambda 有什么用?
我们在哪里使用 Retrolambda 框架?

0 投票
1 回答
1147 浏览

java - 找不到封闭方法'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'

我在我的项目中使用了 RxJava2 和 Retrolambda,有一段时间我感觉很好,将回调包装到 flowables 中,但是有一天我遇到了这个错误,如果我尝试在这个非常简化的代码片段上运行 proguard:

然后我会收到这个警告,它使我的构建失败:警告:com.yandex.testfield.MainActivity$1:在程序类 com.yandex 中找不到封闭方法 'void lambda$getTestFlowable$0(io.reactivex.FlowableEmitter)'。 testfield.MainActivity

目前,我看到这个问题的两个临时解决方案:

  1. 不要使用 lambda 并改用匿名类

    /li>
  2. 在包含上面列出的方法的类上禁用 proguard

但我仍然想知道为什么会这样?这是 RxJava2\Retrolambda\Proguard 中的错误吗?

0 投票
1 回答
3778 浏览

android - 将 Retrolambda 替换为 Android Studio 3.0 Java 8 内置功能

在我的项目中,我使用了流行的库retrolambda。我刚刚下载了新的 Android Studio 3.0 Canary 1。

我已经更新了我的项目以使用新版本的 Gradle 等。一切都很好。

Android Studio 3 中的新增功能内置了对一些 Java8 功能的支持。新 AS3 建议删除 retrolambda 并使用这些功能。

Retrolambda 警告

我已删除 retrolambda,Gradle 构建成功,但应用程序因此错误而崩溃(在有 lambda 的地方)

我在我的项目中使用 RxJava2。我不确定这是否与它有关,但在我的情况下,Java8 的内置功能似乎不起作用。也许我需要在“某处”设置一些东西?

我的项目设置在此处输入图像描述

我的 Gradle 文件

根项目

应用模块

0 投票
0 回答
62 浏览

java - Retrolambda 和 Web 应用程序

我想使用 Java 8 提供的 lambda 表达式。但是,我仅限于 JRE 6。我知道 retrolambda 可以对代码进行反向移植。但是,是否可以将 retrolambda 用于 Web 应用程序(.war)?实际上,我想编写使用 lambda 表达式的代码,使用我的 Eclipse Neon 开发一个必须在 Tomcat 6 上运行的 Web 应用程序。那么,retrolambda(或其他东西)可以帮助我完成这项任务吗?

0 投票
1 回答
383 浏览

android - RetroLamba 不适用于 android studio

我已将 retrolambda 添加到我的 android 项目中,但是当我尝试运行该项目时,它显示以下错误。

错误:任务“:app:compileRetrolambdaDebug”执行失败。启动进程 'command 'C:\Program Files\Java\jdk1.8.0_71\bin\java.exe' 时出现问题

我已添加库如下

在 build.gradle(项目文件)下的依赖项

在 build.gradle(应用程序模块)文件中,我已将其应用为插件。

项目构建没有错误,但是当我尝试运行它时,它显示了上述错误。这里有什么问题?

0 投票
1 回答
111 浏览

android - 从 rxjava retrolambda 表达式转换为经典表达式

我使用 retrolambda 表达式

一切正常。由于 Roboelectric 测试,我需要将 retrolambda 表达式转换为经典表达式。我努力了

我有错误无法解析方法“订阅(匿名 rx.functions.Action1(java.lang.object)”。