问题标签 [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.
generics - Kotlin Contracts:在具体类型参数上断言实例
我正在尝试编写一个断言函数来检查给定对象是否属于类型T
:
该函数使用 AssertJ 进行具体断言,但我愿意让编译器知道在其执行之后,value
is 的类型T
以便可以进行智能转换。这似乎不起作用,因为:
Error in contract description: references to type parameters are forbidden in contracts
还有另一种方法可以实现这种行为吗?这里有什么问题?这最终会成为可能吗?
(使用 Kotlin v1.3)
generics - 具有高阶函数的 Kotlin 合约
我对 Kotlin 可空性有疑问,我想知道我是否能够通过合同解决它。对于这样的Java
接口:interface Action<T>{ void execute(T param); }
有两个扩展:
和
还有一个带有可为空数据的通用模型:
现在我创建了以Action
接口为参数的函数。案例是仅在 时执行动作参数param != null
,因此如下所示:
那么现在,是否有任何选项可以使用 Kotlin 合约来确保编译器action
不会使用 null 参数执行?
kotlin - Kotlin 合约:两个属性的链接不为空
假设我有这样的课程:
此类确保path != null
当且仅当url != null
Kotlin 契约似乎是告诉编译器这些关系的一种方式。上述不变量是否可以用 Kotlin 合约建模?
我的最终结果是让如下代码编译:
kotlin - Kotlin 合约推断返回值而不是参数值
我有一个看起来像这样的函数:
在我知道 myMyInput
不为空的地方(例如,在将 ainput: MyInput
作为参数的方法中),我希望能够使用input.toOutput
asOutput
而不是Output?
我试过使用
但这意味着倒退。这告诉我,如果toOutput
返回非空类型,则 myinput
是非空的。我想根据参数告诉分析器有关返回值的信息。在 Java 中,我可以使用org.jetbrains.annotations.@Contract("null -> null ; !null -> !null")
它来完成此操作。
有没有办法在 Kotlin 中做到这一点?
generics - kotlin - 从类属性中删除可空性
我有一个具有一些可为空属性的类
和验证功能
在此验证步骤之后,我需要一种方法来指示属性的不可为空description
性。
一种解决方案是创建一个具有非空属性的新数据类data class RequestModel(val description: String)
。
但我正在寻找一种通用方法来避免为每个用例创建新类。
理想的通用解决方案:
如何以通用方式从具有可空属性的类的属性中删除可空性?使用某种 kotlin 编译器合约有用吗?
kotlin - 如何编写以下 Kotlin 合约?
问题很简单:(使用 Kotlin 1.3.71)
我有以下类似的数据:
我想通过这样的调用来实现类型安全:
为此,我建立了:
为了避免使用!!
操作员,我想编写一个合同,帮助编译器推断出一个智能广播,该智能广播说属性lat
和lng
不为空,但我无法成功地做到这一点。
我尝试过没有成功的事情,我相信这可能是因为我没有完全理解合同的动态。这些是风格:
所以问题是:
这可以用当前的 Kotlin 版本完成吗?如果是这样,怎么做?
kotlin - 使用 Kotlin 合约在 Iterable 函数谓词中转换类型
我有这个密封类PictureEvent
:
现在,从PictureEvent
s 列表中,我想获得第一个PictureCreated
:
它工作正常。如您所见,我将事件转换为PictureCreated
(使用as
关键字),因为first
方法返回一个PictureEvent
. 我想知道是否可以通过使用 Kotlin 合约来避免这种转换。
我试过这个:
但它不起作用;first
方法不断返回 a PictureEvent
,而不是PictureCreated
. 目前有可能做到这一点吗?
kotlin - Kotlin 调用就地合约有哪些好处?
谁能向我解释 KotlincallsInPlace
合约有哪些好处?编译器如何利用知道 lambda 函数将被调用的优势?另外,开发者从中得到什么好处?像smartcast之类的?
先感谢您。
kotlin - Kotlin - 为什么编译器合约只允许引用函数参数
在编写验证函数时,这些验证函数通常会检查可空性。即使在调用这些函数之后,对象成员可以像不可为空一样安全地使用,但 Kotlin 编译器合约不允许指定此行为。
例如:
这种约束背后的基本原理是什么,或者这是计划在未来添加的功能?