Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 复杂可变映射类型_Types_Kotlin_Signature_Mutablemap - Fatal编程技术网

Types 复杂可变映射类型

Types 复杂可变映射类型,types,kotlin,signature,mutablemap,Types,Kotlin,Signature,Mutablemap,我有点糊涂了 所以,我有一个类型为的可变映射 val converters=mutableMapOf() 我无法理解的x 我需要根据构造函数和方法在此映射中添加几个对,例如: converters[“Camera”]=::Camera到结构::convertCamera 其中第一个字段是对扩展ElemBase的构造函数的引用,例如: Camera:ElemBase 第二个是结构类上的一个方法,它引用了一个可为空的ElemBase类: fun-convertCamera(目标:KMutablePr

我有点糊涂了

所以,我有一个类型为的可变映射

val converters=mutableMapOf()

我无法理解的
x

我需要根据构造函数和方法在此映射中添加几个对,例如:

converters[“Camera”]=::Camera到结构::convertCamera

其中第一个字段是对扩展
ElemBase
的构造函数的引用,例如:

Camera:ElemBase

第二个是
结构
类上的一个方法,它引用了一个可为空的
ElemBase
类:

fun-convertCamera(目标:KMutableProperty0)

x

KFunction
可以工作,但我需要更具体的东西,其中定义了
Receiver
和参数

我试过几次,比如

k功能单元>

k功能单元>

k功能单元>

每当我尝试向
转换器添加任何内容时,总会出现错误

Error:(276, 9) Kotlin: Type inference failed: Cannot infer type parameter V in operator inline fun <K, V> MutableMap<K, V>.set(key: K, value: V): Unit
None of the following substitutions
receiver: MutableMap<String, Pair<Int, KFunction<Structure.(KMutableProperty0<ElemBase?>) -> Unit>>>  arguments: (String,Pair<Int, KFunction<Structure.(KMutableProperty0<ElemBase?>) -> Unit>>)
receiver: MutableMap<String, Pair<KFunction0<Camera>, KFunction2<Structure, @ParameterName KMutableProperty0<Camera>, Unit>>>  arguments: (String,Pair<KFunction0<Camera>, KFunction2<Structure, @ParameterName KMutableProperty0<Camera>, Unit>>)
can be applied to
receiver: MutableMap<String, Pair<Int, KFunction<Structure.(KMutableProperty0<ElemBase?>) -> Unit>>>  arguments: (String,Pair<KFunction0<Camera>, KFunction2<Structure, @ParameterName KMutableProperty0<Camera>, Unit>>)
尽管我仍然不明白
KFunction*
的情况,为什么它们似乎不存在,尽管手动导入后,编译器会接受它们

在设计气味的情况下,我在这里移植了一些C++代码,如果可能的话,我想坚持原来的结构< /p>
Edit3:好的,我可能会改变设计,但出于好奇,我想知道到底发生了什么,如果你用IntelliJ写下以下代码:

val map = mutableMapOf("Camera" to (::Camera to Structure::convertCamera))
然后,您可以对赋值调用“显式指定类型”意图操作,或者对变量按“Ctrl+Q”以显示其推断的类型信息

这将为您提供以下信息:

val-map:MutableMap

KFunction0
KFunction2
这里是Kotlin编译函数类型的一些类(分别具有0和2个参数的类)。书中:

Kotlin标准库定义了一系列接口,对应于不同数量的函数参数:
Function0
(此函数不带参数)、
Function1
(此函数带一个参数)等等。每个接口定义一个调用方法,调用它将执行函数

您可以用函数类型替换这些类型,并删除一些不必要的特定信息,如下所示:

val映射:可变映射单元>>

由于希望
ElemBase
位于类型中而不是具体的
Camera
类型中,因此可以执行以下操作:

valmap3:MutableMap单元>>


但是,您不能将
KMutableProperty0
更改为
KMutableProperty0
,因为此类型为,因此这将破坏示例中的赋值。就像
MutableList
,它接受并生成其泛型类型,因此它不能在其泛型参数中接受子类型或超类型而不是所需的类型。

如果您在IntelliJ中写下以下代码:

val map = mutableMapOf("Camera" to (::Camera to Structure::convertCamera))
然后,您可以对赋值调用“显式指定类型”意图操作,或者对变量按“Ctrl+Q”以显示其推断的类型信息

这将为您提供以下信息:

val-map:MutableMap

KFunction0
KFunction2
这里是Kotlin编译函数类型的一些类(分别具有0和2个参数的类)。书中:

Kotlin标准库定义了一系列接口,对应于不同数量的函数参数:
Function0
(此函数不带参数)、
Function1
(此函数带一个参数)等等。每个接口定义一个调用方法,调用它将执行函数

您可以用函数类型替换这些类型,并删除一些不必要的特定信息,如下所示:

val映射:可变映射单元>>

由于希望
ElemBase
位于类型中而不是具体的
Camera
类型中,因此可以执行以下操作:

valmap3:MutableMap单元>>

但是,您不能将
KMutableProperty0
更改为
KMutableProperty0
,因为此类型为,因此这将破坏示例中的赋值。与
MutableList
一样,它接受并生成其泛型类型,因此它不能在其泛型参数中接受子类型或超类型而不是所需的类型