首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么Kotlin JDK8也在类路径中包含Kotlin JDK7?

在 Kotlin 1.8.0 版本之前,kotlin-stdlib-jdk7kotlin-stdlib-jdk8 是两个独立的库,分别用于提供与 Java 7 和 Java 8 兼容的标准库功能。然而,在 Kotlin 1.8.0 版本中,这两个库被合并为单一的 kotlin-stdlib 库,该库同时支持 Java 7 和 Java 8 的特性。

合并的原因

  • 简化依赖管理:合并后的库减少了项目中的依赖数量,使得构建配置更加简单和一致。
  • 向后兼容:通过合并,确保了 Kotlin 代码库对旧版本 Java 的兼容性,同时提供了对 Java 8 新特性的支持。

优势

  • 减少类路径冲突:避免在类路径中出现多个版本的 Kotlin 标准库,减少了潜在的冲突和版本管理问题。
  • 简化开发配置:开发者无需在构建脚本中指定多个版本的依赖,减少了配置的复杂性。
  • 提高维护性:单一的库意味着更少的维护工作,便于团队管理和更新 Kotlin 标准库的功能。

应用场景

这种合并主要影响使用 Kotlin 进行开发的项目,特别是在需要同时支持 Java 7 和 Java 8 的环境中。例如,如果你的项目需要利用 Java 7 的某些特性,同时又想使用 Kotlin 的新语言特性,合并后的 kotlin-stdlib 库可以同时满足这两个需求。

通过这种方式,Kotlin 1.8.0 提供了更加灵活和强大的语言支持,同时简化了开发者的构建和配置流程。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring FrameWork 5.0 新功能 概览Spring FrameWork 5.0 新功能 概览

dbc.support.nativejdbc 从spring-aspects 模块移除了包mock.staicmock,不在提AnnotationDrivenStaticEntityMockingControl支持 许多不建议使用的类和方法在代码库中删除...核心特性 JDK8的增强: 访问Resuouce时提供getFile或和isFile防御式抽象 有效的方法参数访问基于java 8反射增强 在Spring核心接口中增加了声明default方法的支持一贯使用...JDK7 Charset和StandardCharsets的增强 兼容JDK9 Spring 5.0框架自带了通用的日志封装 持续实例化via构造函数(修改了异常处理) Spring 5.0框架自带了通用的日志封装...Filter实现 在Spring MVC Controller方法里支持Servlet4.0 PushBuilder参数 多个不可变对象的数据绑定(Kotlin/Lombok/@ConstructorPorties...在spring-web包里包含HttpMessageReade和HttpMessageWrite Kotlin 增加了 Kotlin 支持 测试方面的改进 完成了对JUnit 5’s Juptier编程和拓展模块在

61210
  • Spring5都有那些新特性与增强,需要了解的Java程序员来看一看

    dbc.support.nativejdbc 从spring-aspects 模块移除了包mock.staicmock,不在提AnnotationDrivenStaticEntityMockingControl支持 许多不建议使用的类和方法在代码库中删除...核心特性 JDK8的增强: 访问Resuouce时提供getFile或和isFile防御式抽象 有效的方法参数访问基于java 8反射增强 在Spring核心接口中增加了声明default方法的支持一贯使用...JDK7 Charset和StandardCharsets的增强 兼容JDK9 Spring 5.0框架自带了通用的日志封装 持续实例化via构造函数(修改了异常处理) Spring 5.0框架自带了通用的日志封装...参数 多个不可变对象的数据绑定(Kotlin/Lombok/@ConstructorPorties) 支持jackson2.9 支持JSON绑定API 支持protobuf3 支持Reactor3.1...在spring-web包里包含HttpMessageReade和HttpMessageWrite 测试方面的改进 完成了对JUnit 5’s Juptier编程和拓展模块在Spring TestContext

    1.2K70

    快速学习-Spring5 的新特性

    但是不能使用 jdk8 以下版本构建工程。由于 jdk 和 tomcat 版本的更新,我们的 IDE 也需要同时更新。...3.2 核心容器的更新 Spring Framework 5.0 现在支持候选组件索引作为类路径扫描的替代方案。该功能已经在类路径扫描器中添加,以简化添加候选组件标识的步骤。...在编译时,源模型是自包含的,JPA 实体和 Spring 组件是已被标记的。 从索引读取实体而不是扫描类路径对于小于 200 个类的小型项目是没有明显差异。但对大型项目影响较大。加载组件索引开销更低。...在 Java 8 中, 你会需要专门引入依赖来使用 Reactive Streams API。...在 spring-webflux 中包含了两种独立的服务端编程模型:基于注解:使用到了@Controller 以及 Spring MVC 的其它一些注解; 使用 Java 8 lambda 表达式的函数式风格的路由和处理

    88320

    【Flutter 专题】43 图解 Flutter 适配 AndroidX

    androidx 不兼容,和尚整理一下尝试步骤; 首先需要了解一下 Android 的基本情况,目前已经由 V7 发展到 androidx,主要避免包越来越臃肿的问题,而 Android 的新特性也会在...androidx 中进行优化增加;与之而来的挑战是适配问题,support 包与 androidx 不兼容,二者存一,在项目中需要好好斟酌; 和尚未适配 androidx 时引入三方库时会提示如下问题...更新 build.gradle 中 classpath 与 Kotlin 版本 文件路径:classpath,此时注意 Kotlin 版本升至 1.3.0 及以上; ? 3....更新 Module 中 build.gradle SDK 版本 文件路径:android/app/build.gradle,此时注意除了当前 SDK 版本升级之后,androidTestImplementation...文件路径:android/app/build.gradle,此时需要将 dependencies 中 jre7 替换为 jdk8 即可; ?

    1.3K41

    大数据开发:Spring 5的新特性

    在此期间,大多数增强都是在 SpringBoot 项目中完成的。在本文中,我们将很快了解到Spring5发行版中的一些令人兴奋的特性。 1....GA版本中你可以期待良好的 JDK9 支持。 3. 使用 JDK8 特性 在 Spring4.3 之前,JDK基准版本是6。...• 支持带有可选参数和默认值的Kotlin不可变类。 • 支持使用Kotlin DSL定义函数式Bean。 • 支持在WebFlux中使用有路由功能的Kotlin DSL。...• 利用Kotlin reified的类型参数来避免在各种API(如RestTemplate或WebFluxAPI)中明确指定用于序列化/反序列化的Class。...• ScriptTemplateView中的Kotlin脚本支持Spring MVC和Spring WebFlux。 • 支持带有可选参数的Kotlin自动装配构造函数。

    1.5K20

    (三)组件治理之编译期检查

    里面的 Class 文件,并收集出 Class 文件的字段、方法等信息,然后存到一个以 ClassName 为 key 的 map 集合中,方便后面在分析 Class 文件时可以直接判断引用的类是否存在...这里有一个细节点,在方法 Code 中的字段与方法调用,在 owner 找不到的情况还要继续从他的父类与接口继续查找,因为调用的字段与方法有可能在父类。...文件的引用情况 在 layout 的布局 xml 中,对于自定义 view 的定义,也需要进行类扫描 4、插件介绍 1、插件能力 分析模块之间的真实引用关系,并生成 plantUML 与 mermaid...在 Kotlin 中,接口继承接口时,也是可以实现父类的抽象方法,效果看起来跟 Java 的 default 类似,示例如下: Dog 接口实现了父类 IAnimal 接口的抽象 run 方法,代码上来看并没有问题...Decompile 看下具体原因了: Kotlin 接口实现方法居然是通过桥接类做到的,Dog 类的 run 方法仍然是抽象方法,在 Kotlin 的这种情况下,我没办法通过类遍历来检查抽象方法有无实现

    21830

    Java集合篇:HashMap 与 ConcurrentHashMap 原理总结

    JDK8 及之后的版本,对 hash() 方法进行了优化,重新计算 hash 值时,让 hashCode 的高16位参与异或运算,目的是即使 table 数组的长度较小,在计算元素存储位置时,也能让高位也参与运算...5、HashMap 在 JDK7 和 JDK8 有哪些区别?...如何变成线程安全: 无论在 JDK7 还是 JDK8 的版本中,HashMap 都是线程不安全的,HashMap 的线程不安全主要体现在以下两个方面: 在JDK7及以前的版本,表现为在多线程环境下进行扩容...在第二部分我们提到 JDK8 和 JDK7 中 ConcurrentHashMap 的设计是不一样的,那么下面我们就简单介绍一下 JDK7 中 ConcurrentHashMap 的实现: 1、ConcurrentHashMap...,从而降低时间复杂度(由O(n) 变成了 O(logN)),提高了效率 (2)锁的实现:JDK7的锁是segment,是基于ReentronLock实现的,包含多个HashEntry;而JDK8 降低了锁的粒度

    9.1K11

    面试官问JDK7和JDK8的HashMap不一样在哪里?我懵了

    相信大家在面试的时候,肯定很多人被问到HashMap,一般上来都是 HashMap 用过没有,说一下他的数据结构吧,但是阿粉的朋友去面试的时候,上来直接进入主题,HashMap 在 JDK7 和 JDK8...JDK7 的HashMap 我们先说 JDK7 中的 HashMap 的数据结构,然后一会我们再去看 JDK8 中的 HashMap的数据结构....我们也都知道 JDK7 中的 HashMap 的数据结构是一个数组加上链表的形式,也就是下面这副图, 也就是说相当于从左到右,HashMap 就相当于一个数组,而数组中每个元素是一个单向链表,图中的横向的每一个绿色的方块都表示...的构造函数 在无参构造函数时,JDK8 是初始化 loadFactor 让其等于默认值,那 JDK7 是什么样子的呢?...红黑树有下面几个特性 1、每个节点要么是红色,要么是黑色,但根节点永远是黑色的; 2、每个红色节点的两个子节点一定都是黑色; 3、红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色); 4、从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点

    21620

    面试官问JDK7和JDK8的HashMap不一样在哪里?我懵了

    相信大家在面试的时候,肯定很多人被问到HashMap,一般上来都是 HashMap 用过没有,说一下他的数据结构吧,但是阿粉的朋友去面试的时候,上来直接进入主题,HashMap 在 JDK7 和 JDK8...JDK7 的HashMap 我们先说 JDK7 中的 HashMap 的数据结构,然后一会我们再去看 JDK8 中的 HashMap的数据结构....我们也都知道 JDK7 中的 HashMap 的数据结构是一个数组加上链表的形式,也就是下面这副图, 也就是说相当于从左到右,HashMap 就相当于一个数组,而数组中每个元素是一个单向链表,图中的横向的每一个绿色的方块都表示...的构造函数 在无参构造函数时,JDK8 是初始化 loadFactor 让其等于默认值,那 JDK7 是什么样子的呢?...红黑树有下面几个特性 1、每个节点要么是红色,要么是黑色,但根节点永远是黑色的; 2、每个红色节点的两个子节点一定都是黑色; 3、红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色); 4、从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点

    20920

    有赞 Android 编译进阶之路 —— 增量编译提效方案Savitar

    本地的改动中会包含 Java、Kotlin 源代码改动信息,还有 Xml,图片等资源的改动信息,这些文件生成产物的方式是不一样的,各自使用的工具以及需要的依赖也不同,所以,在真正编译之前,还需要获取到编译过程中各种依赖信息和工程信息...MakeParam:信息集合保存类 ProjectParam:保存主工程信息,包括所有需要的路径、主包名、启动的 Activity、资源 ID 固定之后保存文件路径、Android SDK 编译版本等...例如存在 A.kt 与 B.java 文件存在依赖引用,如果先编译 B.java 文件,就会出现 B.java 文件对于 A.kt 类依赖找不到的错误。这是为什么呢?....* 这个时候需要借助到 Kotlin 编译器插件,在 Kotlin 编译时传入 Kotlinx 对应插件的 Jar 地址和参数,就可以完成包含 Kotlinx 语法的文件编译。...Kotlin 编译器插件 6.2 为什么使用 Shell 脚本实现 Shell 脚本可以直接在 Mac 系统下面执行,在 Shell 脚本里面可以方便地调用编译过程中所需要的命令,并且调试运行也非常方便

    2.6K51

    耗时一周,我解决了微信 Matrix 增量编译的 Bug,已提 PR

    看了一下报错信息,某些 class 文件在 dex 文件中没有找到,即 ClassNotFoundException 。...,而不是像JDK8以下一样,只能通过Java修饰符来控制访问权限;而这个module-info.class就是来管理和描述这个包的; 在JDK8及以下,module-info.class并不会起作用,只有在...JDK9以上才会起作用; 可以看到这个class并不是一个正常的class,并不包含类或者方法,所以asm和javassist处理这个class时,就会解析报错; 具体的可以看一下这篇文章 Android...所以,还是得找为什么 dirInputOutMap 中 input 和 output file 的路径是一样的 还记得前面的 MatrixTrace#doTransform 方法嘛,我们来看一下 step1...于是在本地尝试了好久,终于发现了复现路径,然后到 issue 上面也搜了一下,发现很多人遇到这个问题,但是还没有解决。 于是,就先关了 trace 插件的增量编译,发现 OK 了。

    1.3K20

    Kotlin:01-Kotlin简介及编译环境搭建

    (以上内容来自于度娘) 二、为什么要学Kotlin 首先放一张kotlin中文站的截图: kotlin中文站的截图.png 瞅见没,简介+安全+互操作性+工具友好性。...Intellij IDEA 中已经集成了 Kotlin 编译环境 AndroidStudio 3.0 也集成了 Kotlin 编译环境 Eclipse 需要安装对应的 kotlin 插件才可以 Complier...初次开启 上图中编号的含义分别如下: 1、创建一个新的项目 2、导入已有项目 3、打开本地项目 4、从版本控制软件中拉取 我们选择1 新建一个项目,然后按照下图操作: 新建kotlin项目 创建项目名称并选择路径...,记得选择接受 安装中 安装完成提示重启 kotlin插件安装成功 创建kotlin项目 为项目命名并选择项目存储路径 项目创建成功 创建kotlin文件 输入kotlin文件名称 文件创建完成并输入代码...关于如何在AndroidStudio 中编写kotlin代码,后面再单独说。现在重点介绍的是kotlin的基本语法类内容。 本篇文章到此结束。

    1.8K20

    面试官问:JDK8 的ConcurrentHashMap为什么放弃了分段锁

    在 JDK7 中 ConcurrentHashMap 底层数据结构是数组加链表,这也是之前阿粉说过的 JDK7和 JDK8 中 HashMap 不同的地方,源码送上。...为什么 JDK8 舍弃掉了分段锁呢? 这时候就有很多人关心了,说既然这么好用,为啥在 JDK8 中要放弃使用分段锁呢?...因为在 JDK7 中 Segment 继承了重入锁ReentrantLock,但是大家有没有想过,如果说每个 Segment 在增长的时候,那你有没有考虑过这时候锁的粒度也会在不断的增长。...所以,这也是为什么在 JDK8 不在继续使用分段锁的原因。...实际上我们也可以这么理解,就是在 JDK7 中,使用的是分段锁,在 JDK8 中使用的是 “读写锁” 毕竟采用了 CAS 和 Synchronized 来保证线程的安全。

    72820

    腾信 Matrix 增量编译 bug 解决之路,PR 已通过

    看了一下报错信息,某些 class 文件在 dex 文件中没有找到,即 ClassNotFoundException 。...,而不是像JDK8以下一样,只能通过Java修饰符来控制访问权限;而这个module-info.class就是来管理和描述这个包的; 在JDK8及以下,module-info.class并不会起作用,只有在...JDK9以上才会起作用; 可以看到这个class并不是一个正常的class,并不包含类或者方法,所以asm和javassist处理这个class时,就会解析报错; 具体的可以看一下这篇文章 Android...所以,还是得找为什么 dirInputOutMap 中 input 和 output file 的路径是一样的 还记得前面的 MatrixTrace#doTransform 方法嘛,我们来看一下 step1...于是在本地尝试了好久,终于发现了复现路径,然后到 issue 上面也搜了一下,发现很多人遇到这个问题,但是还没有解决。 于是,就先关了 trace 插件的增量编译,发现 OK 了。

    1.5K30
    领券