使用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设置为多少。






原因: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



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<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
	        for (String feature : features) {
	            System.out.println("Java 8之前................"+feature);
	        }
	    }
}

运行结果:



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

                    https://wiki.eclipse.org


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值