在Kotlin中通过委托实现对象
通过委托实现类是可能的在Kotlin中通过委托实现对象,kotlin,Kotlin,通过委托实现类是可能的 class Envs( val map: Map<String, String> = to_map() ) : Map<String, String> by map 正如注释中所解释的,对象不能接受参数,因为它们是静态初始化的(在java的静态块中) 对于更新后的问题,不可能指向未在主构造函数中声明的变量。课程也是如此: class-Envs:Map by-Map{ val map:map=to_map() } ^上面的代码不会编译,因为在
class Envs(
val map: Map<String, String> = to_map()
) : Map<String, String> by map
正如注释中所解释的,
对象
不能接受参数,因为它们是静态初始化的(在java的静态块中)
对于更新后的问题,不可能指向未在主构造函数中声明的变量。课程也是如此:
class-Envs:Map by-Map{
val map:map=to_map()
}
^上面的代码不会编译,因为在委派时无法访问map变量。它仅对其中声明的方法可用
你可以用它做你想做的事:
object Envs:Map by to_Map()
或者,如果您想拥有贴图的引用,但由于对象是贴图本身,因此您不能保留其引用
object Envs:Map by to_Map(){
val-map:map=this
}
但是它(^)有点无用,您可以使用
this
或Envs
来访问映射。正如注释中所解释的,对象
不能接受参数,因为它们是静态初始化的(在java的静态块中)
对于更新后的问题,不可能指向未在主构造函数中声明的变量。课程也是如此:
class-Envs:Map by-Map{
val map:map=to_map()
}
^上面的代码不会编译,因为在委派时无法访问map变量。它仅对其中声明的方法可用
你可以用它做你想做的事:
object Envs:Map by to_Map()
或者,如果您想拥有贴图的引用,但由于对象是贴图本身,因此您不能保留其引用
object Envs:Map by to_Map(){
val-map:map=this
}
但是它(^)有点没用,你可以用
this
或Envs
来访问地图。对象不应该使用参数,它们的初始化更像是静态的(实际上不是静态的,而是像它一样)。你可以做更多的事情,比如object Envs:Map by to_Map()
错误消息与委派无关:“对象不允许使用构造函数”@Moira my bad,我发布了稍有错误的代码,请查看更新的问题。object
不应该接受参数,它们初始化更像是静态的(实际上不是静态的,但喜欢它)。你可以做更多的事情,比如object Envs:Map by to_Map()
错误消息与委托无关:“对象不允许使用构造函数”@Moira my bad,我发布了稍微错误的代码,请查看更新的问题。
object Envs : Map<String, String> by map {
val map: Map<String, String> = to_map()
}