Kotlin 当我需要对参数执行操作时,如何使用辅助构造函数
我有这个类(提供了一个有理数的实现),我在编写第二个构造函数时遇到了问题-我需要对作为参数传递的value:String进行一些计算,我不知道如何编写它 这就是我现在所拥有的,而且有效。大多数情况下。失败的情况是当分母为1时字符串不包含“/”akaKotlin 当我需要对参数执行操作时,如何使用辅助构造函数,kotlin,constructor,Kotlin,Constructor,我有这个类(提供了一个有理数的实现),我在编写第二个构造函数时遇到了问题-我需要对作为参数传递的value:String进行一些计算,我不知道如何编写它 这就是我现在所拥有的,而且有效。大多数情况下。失败的情况是当分母为1时字符串不包含“/”aka data class Rational(val num:BigInteger, val den: BigInteger){ private val numerator private val denominator init{
data class Rational(val num:BigInteger, val den: BigInteger){
private val numerator
private val denominator
init{
denominator = when (den){
0.toBigInteger -> thrown IllegalArgumentException()
else -> den
}
numerator = num
}
constructor (value: String) :
this(value.split("/")[0].toBigInteger(), value.split("/")[1].toBigInteger())
}
如何修复它?为什么它必须是构造函数而不是工厂方法?即使这样,您也可以将逻辑提取到帮助器中(由于需要两个值,所以稍微复杂一些):
数据类Rational(val-num:biginger,val-den:biginger){
...
私有构造函数(pair:pair):这个(pair.first,pair.second)
构造函数(值:字符串):
此(解析字符串(值))
伴星{
私有字符串(值:字符串)=
if(value.contains(“/”){
val parts=value.split(“/”)
配对(部件[0]。Tobiginger(),部件[1]。Tobiginger())
}否则
对(value.tobiginger(),1.tobiginger())
}
}
为什么它必须是构造函数而不是工厂方法?即使这样,您也可以将逻辑提取到帮助器中(由于需要两个值,所以稍微复杂一些):
数据类Rational(val-num:biginger,val-den:biginger){
...
私有构造函数(pair:pair):这个(pair.first,pair.second)
构造函数(值:字符串):
此(解析字符串(值))
伴星{
私有字符串(值:字符串)=
if(value.contains(“/”){
val parts=value.split(“/”)
配对(部件[0]。Tobiginger(),部件[1]。Tobiginger())
}否则
对(value.tobiginger(),1.tobiginger())
}
}
这是个好主意!我来试试这个。这是个好主意!我试试这个
data class Rational(val num:BigInteger, val den: BigInteger){
...
private constructor (pair: Pair<BigInteger, BigInteger>) : this(pair.first, pair.second)
constructor (value: String) :
this(parseString(value))
companion object {
private fun parseString(value: String) =
if (value.contains("/")) {
val parts = value.split("/")
Pair(parts[0].toBigInteger(), parts[1].toBigInteger())
} else
Pair(value.toBigInteger(), 1.toBigInteger())
}
}