标签: kotlin-null-safety

什么是Kotlin双爆炸(!!)操作员?

我正在用Android Studio将Java转换为Kotlin.我在实例变量后获得双重爆炸.什么是双重爆炸,更重要的是这在哪里记录?

mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-null-safety

133
推荐指数
3
解决办法
4万
查看次数

在kotlin中检查无效的最佳方法?

我应该使用双倍=还是三倍=

if(a === null)  {
//do something
}
Run Code Online (Sandbox Code Playgroud)

要么

if(a == null)  {
//do something
}
Run Code Online (Sandbox Code Playgroud)

同样地,'不等于':

if(a !== null)  {
//do something
}
Run Code Online (Sandbox Code Playgroud)

要么

if(a != null)  {
//do something
}
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-null-safety

67
推荐指数
5
解决办法
4万
查看次数

如果object为null,如何运行代码?

在Kotlin中,如果对象不是null,我可以运行代码:

data?.let {
    ... // execute this block if not null
}
Run Code Online (Sandbox Code Playgroud)

但如果对象为null,我该如何执行代码块?

kotlin kotlin-null-safety

31
推荐指数
5
解决办法
1万
查看次数

在Kotlin中处理可空或空列表的惯用方法

说我有一个activities类型的变量List<Any>?.如果列表不为空且不为空,我想做某事,否则我想做其他事情.我想出了以下解决方案:

when {
    activities != null && !activities.empty -> doSomething
    else -> doSomethingElse
}
Run Code Online (Sandbox Code Playgroud)

在Kotlin有更实用的方法吗?

idioms kotlin kotlin-null-safety

26
推荐指数
4
解决办法
2万
查看次数

如何在Kotlin中对非空,非空字符串进行惯用测试?

我是Kotlin的新手,我正在寻找建议,以更优雅的方式重写以下代码.

var s: String? = "abc"
if (s != null && s.isNotEmpty()) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下代码:

if (s?.isNotEmpty()) {
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨

Required: Boolean
Found: Boolean?
Run Code Online (Sandbox Code Playgroud)

谢谢.

kotlin kotlin-null-safety

20
推荐指数
2
解决办法
6157
查看次数

Kotlin - lateinit VS Any?= null

在Kotlin中,似乎有两种方法在对象内声明一个变量,该变量可以为null并在创建对象后实例化.

var myObject : Any? = null
Run Code Online (Sandbox Code Playgroud)

要么

var lateinit myObject : Any  
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么我们可以让var可以为空并在以后分配它时需要lateinit关键字.每种方法的优缺点是什么?每种方法应该在什么情况下使用?

android kotlin kotlin-null-safety

17
推荐指数
2
解决办法
3984
查看次数

如何在kotlin中使用@Autowired或@Value等弹簧注释作为原始类型?

使用弹簧注释自动装配非基元

@Autowired
lateinit var metaDataService: MetaDataService
Run Code Online (Sandbox Code Playgroud)

作品.

但这不起作用:

@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Int
Run Code Online (Sandbox Code Playgroud)

有错误:

原始类型不允许使用lateinit修饰符.

如何将原始属性自动装配到kotlin类中?

spring kotlin kotlin-interop kotlin-null-safety

15
推荐指数
3
解决办法
1万
查看次数

Dart 的“声音零安全”与 Kotlin 零安全有何不同?

这段 Dart 官方视频指出,Dart 所谓的“声音空安全”比 Kotlin 的空安全设计要好,因为它可以根据变量是否被声明为可空来优化代码,其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。

那么,Dart 做了哪些额外的优化?

它如何与不支持空安全的遗留代码库互操作,同时确保空安全?

language-design dart kotlin kotlin-null-safety dart-null-safety

15
推荐指数
2
解决办法
1348
查看次数

Kotlin不可空的值可以为null吗?

我有后端给我一些json.

我把它解析给我的班级:

class SomeData(
  @SerializedName("user_name") val name: String,
  @SerializedName("user_city") val city: String,
  var notNullableValue: String)
Run Code Online (Sandbox Code Playgroud)

使用gson转换器工厂:

Retrofit retrofit = new Retrofit.Builder()
  .baseUrl(ENDPOINT)
  .client(okHttpClient)
  .addConverterFactory(GsonConverterFactory.create(gson))
  .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
  .build();
Run Code Online (Sandbox Code Playgroud)

在我的界面:

interface MyAPI {
    @GET("get_data")
    Observable<List<SomeData>> getSomeData();
}
Run Code Online (Sandbox Code Playgroud)

然后我从服务器(使用rxJava)检索数据,没有任何错误.但我期待一个错误,因为我认为我应该做这样的事情(以防止GSON转换器错误,因为notNullableValue我的JSON响应中不存在):

class SomeData @JvmOverloads constructor(
  @SerializedName("user_name") val name: String,
  @SerializedName("user_city") val city: String,
 var notNullableValue: String = "")
Run Code Online (Sandbox Code Playgroud)

从后端接收数据并使用没有def值的构造函数解析到我的SomeData类之后,notNullableValue的值== null.

据我所知,在Kotlin中,不可空的值可以为空?

gson kotlin kotlin-null-safety

12
推荐指数
1
解决办法
3287
查看次数

无法将不可为 null 的 LiveData 值设置为 null

下面代码返回title的错误,没有意义

private val _error = MutableLiveData<String?>()
val error: LiveData<String?> get() = _error


_error.postValue(null)  //Error Cannot set non-nullable LiveData value to null [NullSafeMutableLiveData]
Run Code Online (Sandbox Code Playgroud)

参数String_error 显然是空的,我做错了什么?

android kotlin android-livedata kotlin-null-safety

12
推荐指数
1
解决办法
3323
查看次数