kotlin - Kotlin 构造函数重载
问题描述
我试图重载一个类的构造函数,以便它接受字符串和整数。
class Load (val duration: Int = 0,val minrep: Int = 0,val maxrep: Int = 0): Serializable{
constructor(duration: String = "0",minrep: String = "0",maxrep: String = "0")
: this(duration.toInt(),minrep.toInt(),maxrep.toInt())
问题是因为我被迫立即调用超级构造函数,我无法检查变量中的“”,这是一种可能的状态,然后将应用程序崩溃到 .toInt()。
所以我想做的是这样的:
constructor(duration: String = "0",minrep: String = "0",maxrep: String = "0") {
if(duration == "")
duration = "0"
...
this(duration.toInt(),minrep.toInt(),maxrep.toInt())
}
但是如何?
解决方案
将额外的数据转换逻辑提取到某个函数并调用它而不是 simple .toInt()
:
class Load(val duration: Int = 0, val minrep: Int = 0, val maxrep: Int = 0) {
companion object {
//`String` will have this extension function only in the scope of `Load` class
private fun String.toIntOrZero() = toIntOrNull() ?: 0
}
constructor(duration: String = "0", minrep: String = "0", maxrep: String = "0")
: this(duration.toIntOrZero(), minrep.toIntOrZero(), maxrep.toIntOrZero())
}
请注意,在此实现中,所有其他不可解析的字符串Int
也将回退到 0
推荐阅读
- excel - excel + vba + 编译错误 AutoOpenRequiredWorkbook (myFileNameToOpen, myFilePath) 无法弄清楚为什么我会收到此错误
- javascript - 基于具有唯一值的数组创建多个动态选择过滤器以过滤 Vue.js 中的另一个数组
- sql - 使用 SQL Server:如何使用基于 sum 的选择条件
- python - 每列中唯一值的切割表
- c# - 如何在基于部署环境的静态类中加载 appsettings.json,以便我可以在其他类库中使用
- javascript - 为什么我需要 setTimeout.bind(window)
- python - Euler 项目中的意外输出(项目编号 3)
- python - “TypeError:列表索引必须是整数或切片,而不是元组” - 如何将列表项放入矩阵
- java - 使用 JOINED 继承策略并设置 spring.jpa.properties.hibernate.jdbc.batch_size 时实体部分保存
- highcharts - 如何在 highcharts 中实现这种类型的标记?