漳州网站建设去博大a优,搜网站旧域名,企业信息公开网查询,找装修Kotlin1.8.0新特性
新特性概述
JVM 的新实验性功能#xff1a;递归复制或删除目录内容提升了 kotlin-reflect 性能新的 -Xdebug 编译器选项#xff0c;提供更出色的调试体验kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib提升了 Objective-C/Swift 互操作…Kotlin1.8.0新特性
新特性概述
JVM 的新实验性功能递归复制或删除目录内容提升了 kotlin-reflect 性能新的 -Xdebug 编译器选项提供更出色的调试体验kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib提升了 Objective-C/Swift 互操作性与 Gradle 7.3 兼容 递归复制或删除目录内容
注意
这些新功能对于java.nio.file.path来说是实验性的。如果要调用他们你需要添加OptIn(kotlin.io.path.ExperimentalPathApi::class)或者kotlin.io.path.ExperimentalPathApi注释。你也可以添加编译器选项-opt-inkotlin.io.path.ExperimentalPathApi。两个扩展函数它允许你递归 java.nio.file.PathcopyToRecursively() deleteRecursively()
将目录及其内容复制到另一个目标。删除目录及其内容。 作为备份过程的一部分这些功能非常有用。 异常处理
copyToRecursively() onError例如
sourceRoot.copyToRecursively(destinationRoot, followLinks false,onError { source, target, exception -logger.logError(exception, Failed to copy $source to $target)OnErrorResult.TERMINATE})使用 时如果在删除文件或文件夹时发生异常则会跳过该文件或文件夹。删除完成后将引发包含作为抑制异常发生的所有异常。deleteRecursively() deleteRecursively() IOException 文件覆盖 如果发现目标目录中已存在文件则会发生异常。如果要覆盖该文件请使用 with 作为参数的重载并将其设置为 copyToRecursively() overwrite true 例如
fun setUpEnvironment(projectDirectory: Path, fixtureName: String) {fixturesRoot.resolve(COMMON_FIXTURE_NAME).copyToRecursively(projectDirectory, followLinks false)fixturesRoot.resolve(fixtureName).copyToRecursively(projectDirectory, followLinks false,overwrite true) // patches the common fixture
}自定义复制操作 重载copyAction 例如
sourceRoot.copyToRecursively(destinationRoot, followLinks false) { source, target -if (source.name.startsWith(.)) {CopyActionResult.SKIP_SUBTREE} else {source.copyToIgnoringExistingDirectory(target, followLinks false)CopyActionResult.CONTINUE}
}提升了 kotlin-reflect 性能
利用现在使用 JVM 目标 1.8 编译的事实我们将内部缓存机制迁移到 Java 的 .以前我们只缓存 但现在我们也缓存和.这些更改在调用 时显著提高了性能。kotlin-reflect ClassValue KClass KType KDeclarationContainer typeOf()
新的 -Xdebug 编译器选项
Kotlin 1.8.0 添加了一个新的编译器选项该选项禁用优化以获得更好的调试体验。目前该选项禁用协程的“已优化”功能。将来在我们添加更多优化后此选项也会禁用它们。-Xdebug “已优化”功能可在使用挂起函数时优化变量。但是很难使用优化变量调试代码因为看不到它们的值。 禁止在生产环境中使用该选项可能会产生内存泄露。
kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib
不同版本的stdlib已统一合并到kotlin-stdlib中
提升了Object及Swift的互操作
为了使 Kotlin 与 Objective-C 和 Swift 更具互操作性添加了三个新的注释
ObjCName 允许您在 Swift 或 Objective-C 中指定一个更惯用的名称而不是重命名 Kotlin 声明。 该注释指示 Kotlin 编译器为此类、属性、参数或函数使用自定义的 Objective-C 和 Swift 名称
ObjCName(swiftName MySwiftArray)
class MyKotlinArray {ObjCName(index)fun indexOf(ObjCName(of) element: String): Int TODO()
}// Usage with the ObjCName annotations
let array MySwiftArray()
let index array.index(of: element)HiddenFromObjC允许您从 Objective-C 中隐藏 Kotlin 声明。
注释指示 Kotlin 编译器不要将函数或属性导出到 Objective-C 并因此导出到 Swift。这可以使您的 Kotlin 代码对 Objective-C/Swift 更加友好。
ShouldRefineInSwift 对于用 Swift 编写的包装器替换 Kotlin 声明很有用。
注释指示 Kotlin 编译器将函数或属性标记为生成的 Objective-C API 中的函数或属性。这样的声明获得前缀这使得它们对 Swift 代码不可见。swift_private__
与 Gradle 7.3 兼容
Kotlin 1.8.0 完全支持 Gradle 版本 7.2 和 7.3。您也可以使用 Gradle 版本至最新的 Gradle 版本但如果您这样做请注意您可能会遇到弃用警告或者某些新的 Gradle 功能可能无法使用。
此版本带来了许多更改 将 Kotlin 编译器选项公开为 Gradle 惰性属性 提高支持的最低版本 从 Kotlin 1.8.0 开始支持的最低 Gradle 版本为 6.8.3支持的最低 Android Gradle 插件版本为 4.1.3。 gradle插件版本与gradle版本的对应关系如下 https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin 能够禁用 Kotlin 守护进程回退策略
kotlin.daemon.useFallbackStrategy true false useDaemonFallbackStrategy编译通常运行在gradle守护进程上如果守护进程因为某些原因挂掉了那么还可以在守护进程之外编译运行。
在传递依赖项中使用最新的 kotlin-stdlib 版本 通过以下选项对齐kotlin版本
kotlin.stdlib.jdk.variants.version.alignmentfalse
//或者
implementation(platform(org.jetbrains.kotlin:kotlin-bom:1.8.0))强制检查相关 Kotlin 和 Java 编译任务的 JVM 目标兼容性相等性 解决 Kotlin Gradle 插件的传递依赖关系 为避免传递依赖中版本不一致导致编译出错添加下列选项来进行约束
dependencies {constraints {implementation(org.jetbrains.kotlin:kotlin-sam-with-receiver:1.8.0)}
}弃用和移除 具体查看如下链接 https://kotlinlang.org/docs/whatsnew18.html#deprecations-and-removals
参考
https://kotlinlang.org/docs/whatsnew18.html https://kotlinlang.org/docs/whatsnew-eap.html