我尝试运行以下代码,但代码无法通过编译,我得到错误:
智能强制转换为“Long”是不可能的,因为“I”是一个可变属性,可能已经被更改了
为什么?
class MyClass1(var i: Long?) {
fun change(): Long? {
if (i != null) {
return i + 10L
} else {
return 5L
}
}
}
我用Java写的代码MyClass2,它能很好的工作,为什么?
class MyClass2{
private Long i;
public MyClass2(Long k){
i=k;
}
public Long change(){
if (i!=null){
return i+10L;
}else {
return 5L;
}
}
}
因为< code>i是一个< code>var,所以理论上它可以在空检查和加法运算之间被另一个线程改变。
您可以使用<code>let</code>函数来求解它。它将<code>i</code>的值作为参数提供给<code>let</code>来“捕获”该值。
fun change(): Long? {
return i?.let { it + 10L } ?: 5L
}
我试着运行下面的代码,但是代码不能通过编译,我得到了错误: 我用Java写的代码MyClass2,它能很好地工作,为什么?
我已经使用android studio内置的文件转换器将java文件转换为kotlin。它显示以下错误。 [SMARTCAST_IMPOSSIBLE]智能强制转换为“ReminderRequester”是不可能的,因为“ReminderRequester”是一个可变属性,此时可能已被更改 我查过类似的问题,但我不能正确地理解它。 上述错误的含义是什么?如何修复?
我在kotlin中实现了一个LinkedList,并编写了一个方法从中删除重复项: 在最后两行: (在addNodeToTail方法中),编译器表示由于复杂的表达式,智能转换是不可能的。我必须添加非空断言调用(!!)。 我想了解为什么这个解决方案不被接受,尽管while表达式检查该节点。next不为空。我想知道是否有比使用非空断言调用更好的解决方案(!!)。 感谢您的帮助
问题内容: 有人可以发现我的错误吗,这应该是SQL中的合法查询吗? ON子句中的未知列u.usr_auto_key 这是数据库模式: 这是查询… 问题答案: 尝试切换,并在from子句中:
问题内容: 我知道解决了溢出问题:将两个大的正长添加在一起时,您可能最终得到一个负数。有人可以解释这种按位移位如何神奇地解决溢出问题吗?和它有什么不同? 我的怀疑:我认为这与Java使用两个补码的事实有关,因此,如果我们有额外的空间,则溢出是正确的数字,但是因为我们没有,所以它变为负数。因此,当您移位并以零进行划桨时,由于两个补全,它神奇地得到了固定。但是我可能是错的,大脑有点位的人必须确认。:)
为什么当我使用No.2脚本时Android Studio显示错误。我发现1和2之间没有区别。 请解释这个案例