为什么我会得到一个字符串和一个 Kotlin 值类的类型不匹配?

三元组

我现在正在使用以下代码片段,并希望使用“值类”构造来简化此操作:

@JvmInline
value class SomeId(private val id: String)

data class SomeModel(val id: SomeId, val name: String)
data class SomeHtmlModel(val id: String, val name: String)

val id = SomeId("1")
val value = SomeModel(id,  "name")
val result = SomeHtmlModel(id, value.name)

现在,不幸的是这不起作用,因为SomeHtmlModel需要一个字符串并且 IntelliJ 告诉我存在类型不匹配。我理解整个概念错了吗?我可以使用如上所示的值类吗?

从文档中我还发现了这一点:

// No actual instantiation of class 'Password' happens
// At runtime 'securePassword' contains just 'String' 
val securePassword = Password("Don't try this in production")

这给人的印象是我可以将id变量直接分配给字符串参数。

亨利扭曲

是的,你误会了。在文档中,当将值类与类型别名进行比较时,他们说:

类型别名与其底层类型 [...] 赋值兼容,而内联类则不然。

因此,值类与其底层值的赋值不兼容,如果您想以这种方式使用它们,则必须解开它们。

他们也举了一个例子:

val nameInlineClass = NameInlineClass("")
acceptString(nameInlineClass) // Not OK: can't pass inline class instead of underlying type

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java。getClass()返回一个类,我怎么也可以得到一个字符串?

为什么我得到“元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件)...”?

正则表达式匹配字符串的第一个和最后一个字符,但是为什么呢?

我如何在某个字符值处分割一个字符串,然后得到这个分割的最后一个字?

如果 column1 匹配一个字符串,我需要什么 mysql 函数?

我有一个字符串“ 192.192”,为什么我不能使用'(\ d {1,3})\。\ 1'来匹配它?

我如何用终端的值连接一个字符串?

我有一个问题,从与 sql 中的其他列值不匹配的列中选择一个字符串

介绍一个字符串来定义一个类型

打字稿:为什么我能够为我声明的(接口)数字对象参数分配一个字符串值

查找一个ID并返回一个字符串值

修剪一个字符串直到一个值

如何连接一个字符串和一个 int 类型的变量?

使用 kotlin 在函数内返回一个函数(返回一个字符串)

得到一个字符串的PHP正则表达式匹配

为什么我的strcpy()不覆盖整个字符串并保留最后一个char []中的字符?

我无法计算另一个字符串中的匹配字符串

React:React-Palette“元素类型无效:需要一个字符串但得到:对象。”

一次更改一个字符串中的一个字符,不更改字符串吗?

Kotlin类型不匹配!和?

如何从匹配的字典值中返回一个字符串?

我可以分配一个类型,就好像它是一个 int 或一个字符串

打开一个字符串类型的文字值

匹配一个字符串,但如果包含另一个字符串则不匹配

无法启动React简单应用我得到错误:元素类型无效:需要一个字符串

如何根据替换字符将一个字符串的值替换为另一个字符串?

如何从一个值和一个值列表构建一个字符串?

我怎么知道一个字符串中替换了多少个匹配项?

当一个字符串与另一个字符串匹配时,如何创建条件总和以加数字?