Articles of java 8

Gradle + Retrolambda:致命错误:无法在classpath或bootclasspath中find包java.lang

我正在尝试将gradle-retrolambda集成到我的Android项目中(遵循本指南),但是当我运行gradle构建时出现以下错误 :app:compileDebugJava Fatal Error: Unable to find package java.lang in classpath or bootclasspath 堆栈跟踪: org.gradle.api.tasks.TaskExecutionException:任务’:app:compileDebugJava’的执行失败。 在org.gradle上的org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)位于org.gradle.api.internal的org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)上的.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)位于org.gradle.api.internal.tasks.execution的org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42).tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) .skipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)….引起:org.gradle.api.internal.tasks .compile.CompilationFail edException:编译失败; 请参阅编译器错误输出以获取详细信 org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:47)at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute(Jdk6JavaCompiler.java:38)在org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJav … 我觉得很奇怪,它使用jdk6.Jdk6JavaCompiler虽然我配置了Java7兼容性,请参阅下面的gradle构建文件。 Gradle版本信息: ———————————————————— Gradle 1.12 ———————————————————— Build time: 2014-04-29 09:24:31 UTC Build number: none Revision: a831fa866d46cbee94e61a09af15f9dd95987421 Groovy: 1.8.6 Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013 Ivy: 2.2.0 JVM: […]

如何压制“可以替换为foreach调用”警告

我正在使用带有Android Studio和Retrolambda插件的Java 8将lambdas编译为匿名类(因为Android上不支持Java 8)。 IDE向我显示警告(或提示)如何更改我的代码以使用Java 8的所有function。当您循环收集时,这些function之一是“可以用foreach调用替换”。 我想抑制这种警告,但我无法弄清楚如何做到这一点。 抑制此类警告的最简单方法是@SuppressWarnings(“all”)注释。 但是我想要警告不同types的警告,所以这不是解决方案。 是否有任何方法可以禁用整个IDE或仅代码块(类似@SuppressWarnings(“foreach”) )的此类警告?

Android Studio:lambda不起作用

尝试使用lambdaexpression式时,我遇到了一些Gradle构建错误: 错误:(41,100)错误:-source 1.7不支持lambdaexpression式(使用-source 8或更高版本来启用lambdaexpression式) 错误:任务’:app:compileDebugJava’的执行失败。 编译失败; 请参阅编译器错误输出以获取详细信 快速搜索帮助我理解lambdaexpression式仅支持JDK 1.8,显然我没有使用它。 我的问题是我的计算机上安装了JDK 1.8(我正在使用Yosemite),在模块设置→SDK位置→JDK位置它说: 但是在设置模块→应用程序→源/目标兼容性中,没有诸如“1.8”之类的选项,只有Java 1.6或1.7的选项。 我知道我可以管理没有匿名function,但我仍然想解决这个问题。

我现在可以“使用”Java 8与Android开发吗?

我目前安装了Java 7 JDK。 这已经有一段时间了。 但是,最近,我的教授指示该类卸载Java JDK 7并安装Java JDK 8,以便能够处理家庭作业等。 我一直在使用Java JDK 7编写和部署Android应用程序而没有任何问题所以我想知道现在升级JDK 8是否安全? 我假设我的Android开发中不需要任何Java 8特定的方法或function。 因此,如果我远离那个,我的Android开发是否会受到影响? 另外,我还没有find任何官方文档来说明Java JDK 8是否安全或如何使其安全。 无论哪种方式,我将很快升级到Java 8 …

Android N Java8 java.time

我更新到最新的Android N sdk。 我唯一不理解的是为什么我不能将java.time导入到我的代码中? 我认为Java8可以通过Android N获得。那么为什么Google没有添加java.time包呢?

使用jack时,Lambdaexpression式在Android中的IncompatibleClassChangeError崩溃

我在我的Android项目中使用Java 8。 我已经设置了Jack(在Android应用程序模块中)和Retrolambda(在其他模块中)。 我遇到的问题是,当我尝试使用类variables(并且我可以在任何模块中重现它)时,我的Lambdaexpression式在一个特定场景中崩溃,在所有其他情况下,它按预期工作。 也许这是标准的Java行为,但到目前为止我找不到任何解释。 有谁知道问题在哪里? 我的class级和崩溃如下: public class LambdaBugTest { private final String parentClassVariableString = “parentClassVariableString”; public void testLambdas() { // ———– THESE WORK OK ————– final Functional simpleLambdaWorks = text -> System.out.print(text); final Functional methodReferenceWorks = System.out::print; final Functional interfaceWithClassParamWorks = new Functional() { @Override public void doSomething(String text) { System.out.print(text + ” […]

没有–min-sdk-version> = 24时使用的默认或静态接口方法

为什么我们在Android Studio 3.0 RC1中出现此错误? com.android.dx.cf.code.SimException: default or static interface method used without –min-sdk-version >= 24 根据android文档 ,“默认和静态接口方法”function与Any min-sdk版本兼容。 我将其跟踪到一个调用Comparator.naturalOrder()的java库 – 它已在API级别24中添加。 因此,我不希望在java库中对此代码有任何错误消息。 当我在我自己的android-app或lib java代码中使用代码时,我看到正确的lint消息:“Call需要API级别24” 错误消息是错误的还是我错过了什么?

每次更新到1.8路径时,Android Studio JDK位置都会更改回1.7

我最近安装了jdk 1.8 u92,之后Android Studio表示api24版本需要它。 但是,我现在遇到了这个问题。 我查看了其他一些解决方案并卸载了jdk 1.7,为JDK_HOME,JAVA_HOME和JAVA8_HOME添加了环境variables。 问题仍然存在。 每次我尝试构建应用程序时,gradle sync都会失败,Android studio会要求我选择一个有效的JDK目录 。 然后我转到Project Structure => JDK Location并将其更新到1.8文件夹。 尝试再次构建会产生相同的错误,当我检查项目结构时,路径将自动设置回旧的JDK 1.7。 这个问题有什么问题吗?

以某种方式使用错误的JDK(?)构建Android应用程序

我最近更新了Android Studio 3的Android项目。我想支持Java 8语言function,因此在build.gradle中添加了以下内容: compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } 然后我在Android 8.0.0设备上运行我的应用程序。 在运行时我看到了 java.lang.NoSuchMethodError: No virtual method keySet()Ljava/util/concurrent/ConcurrentHashMap$KeySetView; in class Ljava/util/concurrent/ConcurrentHashMap; or its super classes (declaration of ‘java.util.concurrent.ConcurrentHashMap’ appears in /system/framework/core-oj.jar) 我收集这是因为keySet()的签名在Java 8中从返回Set更改为返回KeySetView 。 导致exception的行如下所示: for (Long id : mSomeMap.keySet()) KeySetView实现了Set ,它肯定是Iterable ,所以无论这行是被解释为Java 7还是Java 8,我都认为它会以任何方式工作。 我对Java基础知识的理解是粗略的 – 这里发生了什么? 更新 到目前为止,我的不明白是: 虽然Android现在支持一些Java 8语言function,但它的API与Jav​​a 8不同。特别是,Android的ConcurrentHashMap.keySet()返回一个Set ,而ConcurrentHashMap.keySet()的Java […]

无法在android studio中解决符号’java.time.LocalDate’错误

我试图在我的Android应用程序中使用java.time.LocalDate,但是如果我尝试导入它,那么java.time中的任何类都会在Android Studio 1.1中无法解析符号错误 我能解决这个问题的唯一原因是它不支持java 8.这是真的吗?