我正在用Android Studio将Java转换为Kotlin.我在实例变量后获得双重爆炸.什么是双重爆炸,更重要的是这在哪里记录?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
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)
要么
if(a != null) {
//do something
}
Run Code Online (Sandbox Code Playgroud) 在Kotlin中,如果对象不是null,我可以运行代码:
data?.let {
... // execute this block if not null
}
Run Code Online (Sandbox Code Playgroud)
但如果对象为null,我该如何执行代码块?
说我有一个activities类型的变量List<Any>?.如果列表不为空且不为空,我想做某事,否则我想做其他事情.我想出了以下解决方案:
when {
activities != null && !activities.empty -> doSomething
else -> doSomethingElse
}
Run Code Online (Sandbox Code Playgroud)
在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中,似乎有两种方法在对象内声明一个变量,该变量可以为null并在创建对象后实例化.
var myObject : Any? = null
Run Code Online (Sandbox Code Playgroud)
要么
var lateinit myObject : Any
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么我们可以让var可以为空并在以后分配它时需要lateinit关键字.每种方法的优缺点是什么?每种方法应该在什么情况下使用?
使用弹簧注释自动装配非基元
@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类中?
这段 Dart 官方视频指出,Dart 所谓的“声音空安全”比 Kotlin 的空安全设计要好,因为它可以根据变量是否被声明为可空来优化代码,其他语言(我假设这是指包括 Kotlin 在内的语言) ) 必须进行运行时检查以确保空值安全。
那么,Dart 做了哪些额外的优化?
它如何与不支持空安全的遗留代码库互操作,同时确保空安全?
language-design dart kotlin kotlin-null-safety dart-null-safety
我有后端给我一些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中,不可空的值可以为空?
下面代码返回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 显然是空的,我做错了什么?