问题标签 [kotlin-contracts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
297 浏览

intellij-idea - 升级到 Kotlin 1.3 后我仍然无法使用合约

我将 IDEA 中的 Kotlin 插件从 1.2.71 升级到 1.3.0,并确保新的 SDK 是 Project SDK:

在此处输入图像描述

我希望能够使用新的kotlin.contracts.contract,但它是深红色的!

在此处输入图像描述

我必须做什么才能获得合同?

0 投票
3 回答
1582 浏览

generics - Kotlin Contracts:在具体类型参数上断言实例

我正在尝试编写一个断言函数来检查给定对象是否属于类型T

该函数使用 AssertJ 进行具体断言,但我愿意让编译器知道在其执行之后,valueis 的类型T以便可以进行智能转换。这似乎不起作用,因为:

Error in contract description: references to type parameters are forbidden in contracts

还有另一种方法可以实现这种行为吗?这里有什么问题?这最终会成为可能吗?

(使用 Kotlin v1.3)

0 投票
3 回答
222 浏览

generics - 具有高阶函数的 Kotlin 合约

我对 Kotlin 可空性有疑问,我想知道我是否能够通过合同解决它。对于这样的Java接口:interface Action<T>{ void execute(T param); }有两个扩展:

还有一个带有可为空数据的通用模型:

现在我创建了以Action接口为参数的函数。案例是仅在 时执行动作参数param != null,因此如下所示:

那么现在,是否有任何选项可以使用 Kotlin 合约来确保编译器action不会使用 null 参数执行?

0 投票
1 回答
861 浏览

kotlin - Kotlin 合约:两个属性的链接不为空

假设我有这样的课程:

此类确保path != null当且仅当url != null

Kotlin 契约似乎是告诉编译器这些关系的一种方式。上述不变量是否可以用 Kotlin 合约建模?

我的最终结果是让如下代码编译:

0 投票
1 回答
274 浏览

kotlin - Kotlin 合约推断返回值而不是参数值

我有一个看起来像这样的函数:

在我知道 myMyInput不为空的地方(例如,在将 ainput: MyInput作为参数的方法中),我希望能够使用input.toOutputasOutput而不是Output?

我试过使用

但这意味着倒退。这告诉我,如果toOutput返回非空类型,则 myinput是非空的。我想根据参数告诉分析器有关返回值的信息。在 Java 中,我可以使用org.jetbrains.annotations.@Contract("null -> null ; !null -> !null")它来完成此操作。

有没有办法在 Kotlin 中做到这一点?

0 投票
2 回答
947 浏览

generics - kotlin - 从类属性中删除可空性

我有一个具有一些可为空属性的类

和验证功能

在此验证步骤之后,我需要一种方法来指示属性的不可为空description性。

一种解决方案是创建一个具有非空属性的新数据类data class RequestModel(val description: String)
但我正在寻找一种通用方法来避免为每个用例创建新类。

理想的通用解决方案:

如何以通用方式从具有可空属性的类的属性中删除可空性?使用某种 kotlin 编译器合约有用吗?

0 投票
3 回答
370 浏览

kotlin - 如何编写以下 Kotlin 合约?

问题很简单:(使用 Kotlin 1.3.71

我有以下类似的数据:

我想通过这样的调用来实现类型安全:

为此,我建立了:

为了避免使用!!操作员,我想编写一个合同,帮助编译器推断出一个智能广播,该智能广播说属性latlng不为空,但我无法成功地做到这一点。

我尝试过没有成功的事情,我相信这可能是因为我没有完全理解合同的动态。这些是风格:

所以问题是:

这可以用当前的 Kotlin 版本完成吗?如果是这样,怎么做?

0 投票
1 回答
165 浏览

kotlin - 使用 Kotlin 合约在 Iterable 函数谓词中转换类型

我有这个密封类PictureEvent

现在,从PictureEvents 列表中,我想获得第一个PictureCreated

它工作正常。如您所见,我将事件转换为PictureCreated(使用as关键字),因为first方法返回一个PictureEvent. 我想知道是否可以通过使用 Kotlin 合约来避免这种转换。

我试过这个:

但它不起作用;first方法不断返回 a PictureEvent,而不是PictureCreated. 目前有可能做到这一点吗?

0 投票
1 回答
234 浏览

kotlin - Kotlin 调用就地合约有哪些好处?

谁能向我解释 KotlincallsInPlace合约有哪些好处?编译器如何利用知道 lambda 函数将被调用的优势?另外,开发者从中得到什么好处?像smartcast之类的?

先感谢您。

0 投票
1 回答
110 浏览

kotlin - Kotlin - 为什么编译器合约只允许引用函数参数

在编写验证函数时,这些验证函数通常会检查可空性。即使在调用这些函数之后,对象成员可以像不可为空一样安全地使用,但 Kotlin 编译器合约不允许指定此行为。

例如:

这种约束背后的基本原理是什么,或者这是计划在未来添加的功能?