使用java8新特性流API

问题:在Android Studio中使用流API时总是报错call requires API Leve24,current is ...



java8种的核心特性,lambda表达式、函数式接口、流API、默认方法和新的Date以及Time API.Android studio增加了对lumbda表达式的支持。我现在想测试流API,看一下它的用法。Android studio本身不支持lumbda和java 8,但是可以通过添加插件来支持lumbda。开发文档中说Jack支持java 8 的新特性(https://developer.android.com/guide/platform/j8-jack.html#supported-features),但是当studio添加完retrolambda,SDK更新到Android N,当在Android Studio中添加

jackOptions {
      enabled true
    }
后报错误:Error:Cannot get property 'destinationDir' on null object,没找到解决办法。

在Studio中写Android 代码,当用到比如foreach之类的方法,如果minSdkVersion小于24,总是报 call requires API Leve24,current is ...,只有把minSdkVersion设置为24+。但是这样的话只能运行在Android 7.0的手机上。手边没有7.0+的手机,studio上也不能创建7.0+模拟器。java工程不需要Android API leve,但是在studio上创建的 java工程都是在 Android Project基础上再通过创建module形式来创建的,当不调用流 API方法时可以正常执行,但是添加流API后还是报错call requires API Leve24,current is 1,无论minSdkVersion设置为多少。
使用java8新特性流API_第1张图片


使用java8新特性流API_第2张图片


使用java8新特性流API_第3张图片


原因:Android Studio不支持java8,jack虽然支持但是jack与retrolumbda冲突(studio不添加retrolumbda不支持lumbda表达式,不添加jack不支持java8,都添加会冲突报Error:Cannot get property 'destinationDir' on null object)。java工程不需要API Level,但是studio中的java工程是在Android project的基础上修改的,还是会报API Leve异常


解决方式:在eclip中使用


步骤:

1.下载最新的eclipse(地址:https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-inst-win64.exe)

neon现在提高了对java8特性的支持,对java9也有一定的支持(更多特性查看https://www.eclipse.org/neon/noteworthy/),同时还支持gradle工程,下载完直接运行就可以

2.创建java工程时选择java8

使用java8新特性流API_第4张图片


public class TestLambda {

	 public static void main(String[] args) {
	        System.out.println("main method run ................");
	        testBeforeForEach();
	        testForEach();
	    }

	    private static void testForEach() {
	        List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
	        features.forEach(n -> System.out.println("Java 8之后.................................................."+n));
	    }

	    private static void testBeforeForEach(){
	        // Java 8之前:
	        List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
	        for (String feature : features) {
	            System.out.println("Java 8之前................"+feature);
	        }
	    }
}

运行结果:

使用java8新特性流API_第5张图片


参考资料:https://developer.android.com/guide/platform/j8-jack.html

                    https://wiki.eclipse.org


你可能感兴趣的:(java)