我在Android中创建一个自定义视图,我想添加一个val字段到构造函数,但是View包含多个构造函数。
class CustomView : View {
// I want a `val field: CustomField` in my constructor
constructor(
context: Context
) : super(context)
constructor(
context: Context,
attrs: AttributeSet? = null
) : super(context, attrs)
constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : super(context, attrs, defStyle)
...
}
Kotlin不允许在二级构造函数中使用val字段,因此我无法执行以下操作:
class CustomView : View {
constructor(
val field: CustomField,
context: Context
) : super(context)
constructor(
val field: CustomField,
context: Context,
attrs: AttributeSet? = null
) : super(context, attrs)
constructor(
val field: CustomField,
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0
) : super(context, attrs, defStyle)
...
如何向构造函数添加val字段,但仍然扩展父类的多个构造函数?
class CustomView : View {
val field: CustomField
constructor(
field: CustomField,
context: Context
) : super(context) { this.field = field }
...
你可以这样做。
您将得到错误属性必须初始化或抽象
,因为必须在类的每个构造函数中初始化字段myCustomField
。
此外,您不能在参数中使用关键字val
class CustomView : View {
val myCustomField : CustomField
constructor(customField : CustomField, context: Context?) : super(context){
this.myCustomField = customField
}
constructor(customField : CustomField ,context: Context?, attrs: AttributeSet?) : super(context, attrs){
this.myCustomField = customField
}
constructor(customField : CustomField, context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
){
this.myCustomField = customField
}
constructor(
customField : CustomField,
context: Context?,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes){
this.myCustomField = customField
}
}
以下作品 而这不是(未解决的引用:tabCount) 我是Kotlin的新手,只是不明白为什么不能在类本身中使用val属性。有人能解释一下吗?谢谢
我是新手。我想在Person类驱动的Employee类中添加age参数。我怎么能在科特林做到?! 我的错误是这样的: 为什么不能在员工构造函数中使用var或val?!我犯了什么错误?
请帮我从这段代码中查找错误。我还是新手,我不知道这是否正确。我确实有一个错误。这就是错误:类Person中的构造函数Person不能应用于给定类型;super();^requiredent:String,String,String找到:没有参数原因:实际和正式参数列表长度不同这是我的代码: 编辑:如果我对Person和Address类都这样做。我只能有三个ARG构造函数。如何调用one-arg构造
我知道数据类就像kotlin中的简单模型一样,默认情况下带有getter和setter,并且非常简单: 是否可以为该数据类声明第二个构造函数?
我有以下课程: 但当我想让name参数在第二个构造函数中不可变时: 我有以下编译时错误: 不允许在辅助构造函数参数上使用Kotlin:“val” 有人能解释为什么Kotlin编译器不允许这样做吗?
我正在做一项关于使用结构化/半结构化/非结构化数据的作业,我正在对莎士比亚的戏剧进行字数统计(以了解语言如何随时间变化),方法是导入每部戏剧的txt文件和xml索引文件,该文件存储有关每部戏剧的关键信息,如编写年份、角色列表等。。然后,我将删除字符名、设置、标点符号和常用词(和、但、或,如果等…)从txt文件准备好进行字数统计-全部在C#中运行的控制台脚本中。我正在编写一个类,每个剧本的数据都将存