我有一个类,它的构造函数有2个int参数(允许空值)。
None of the following functions can be called with the arguments supplied:
public final operator fun plus(other: Byte): Int defined in kotlin.Int
public final operator fun plus(other: Double): Double defined in kotlin.Int
public final operator fun plus(other: Float): Float defined in kotlin.Int
public final operator fun plus(other: Int): Int defined in kotlin.Int
public final operator fun plus(other: Long): Long defined in kotlin.Int
public final operator fun plus(other: Short): Int defined in kotlin.Int
下面是NumberAdder类。
class NumberAdder (num1 : Int?, num2 : Int?) {
var first : Int? = null
var second : Int? = null
init{
first = num1
second = num2
}
fun add() : Int?{
if(first != null && second != null){
return first + second
}
if(first == null){
return second
}
if(second == null){
return first
}
return null
}
}
怎么解决这个问题呢?如果两个都是空的,我想返回空,如果一个是空的,返回另一个,否则返回和。
5条答案
按热度按时间vfwfrxfs1#
因为
first
和second
是变量,所以在执行if测试时,它们不会被智能转换为非空类型。理论上,在if测试之后和+
之前,这些值可以由另一个线程更改。要解决此问题,可以在执行if测试之前将它们分配给局部变量。nr7wwzry2#
最简单的代码修复方法是使用
val
而不是var
:我在这里使用了Kotlin允许在构造函数中赋值
val
。ig9co6j13#
我在使用assertEquals时遇到过类似的问题。
我的准则是
在我修复了这个拼写错误之后,我的IDE说我不能在非Kotlin函数中使用命名参数,所以我将值提取到变量中,一切都开始正常工作。
u91tlkcl4#
这似乎也起作用。
bjp0bcyl5#
}