kotlin 变量类型在运行时改变
kotlin variable type changed in runtime
我在 android 和 kotlin 中遇到了奇怪的问题。
问题是我用 ArrayList<Long>
类型定义变量,但在运行时更改为 ArrayList<Double>
我这样定义我的变量:
private var mDivideEntityValue: ArrayList<Long> = arrayListOf()
并使用 Gson 库来赋值,例如:
// mDivideEntity is string variable store in json array like: ["150","30"]
mDivideEntityValue = Gson().fromJson(mDivideEntity.amounts, ArrayList<Long>()::class.java)
分配 ArrayList<Long>
后更改为 ArrayList<Double>
这是科特林错误吗?或者我想念什么?
我使用 kotlin 1.3.71 和 jvm 1.8。
更新 0:
Json 没有不同的数字类型,因此默认情况下,所有数字都被解析为双精度。当你将 ArrayList<Long>
传递给 fromJson()
时,由于类型擦除,Gson 看不到 <Long>
类型。当您将 class 类型传递给 Java 库时,您也可以使用 <*>
作为类型。
Kotlin 让返回的 ArrayList<Double>
分配给您的 ArrayList<Long>
属性 因为在运行时它无法区分(类型擦除)。
但是,数组确实有具体化的类型。这可能有效(未测试):
val divideEntityValue = Gson().fromJson(mDivideEntity.amounts, LongArray::class.java)
这将为您提供 LongArray 而不是 ArrayList。或者,您应该能够将返回的列表映射到列表:
mDivideEntityValue = Gson().fromJson(mDivideEntity.amounts, ArrayList::class.java)
.map { it.toLong() }
我在 android 和 kotlin 中遇到了奇怪的问题。
问题是我用 ArrayList<Long>
类型定义变量,但在运行时更改为 ArrayList<Double>
我这样定义我的变量:
private var mDivideEntityValue: ArrayList<Long> = arrayListOf()
并使用 Gson 库来赋值,例如:
// mDivideEntity is string variable store in json array like: ["150","30"]
mDivideEntityValue = Gson().fromJson(mDivideEntity.amounts, ArrayList<Long>()::class.java)
分配 ArrayList<Long>
后更改为 ArrayList<Double>
这是科特林错误吗?或者我想念什么?
我使用 kotlin 1.3.71 和 jvm 1.8。
更新 0:
Json 没有不同的数字类型,因此默认情况下,所有数字都被解析为双精度。当你将 ArrayList<Long>
传递给 fromJson()
时,由于类型擦除,Gson 看不到 <Long>
类型。当您将 class 类型传递给 Java 库时,您也可以使用 <*>
作为类型。
Kotlin 让返回的 ArrayList<Double>
分配给您的 ArrayList<Long>
属性 因为在运行时它无法区分(类型擦除)。
但是,数组确实有具体化的类型。这可能有效(未测试):
val divideEntityValue = Gson().fromJson(mDivideEntity.amounts, LongArray::class.java)
这将为您提供 LongArray 而不是 ArrayList。或者,您应该能够将返回的列表映射到列表:
mDivideEntityValue = Gson().fromJson(mDivideEntity.amounts, ArrayList::class.java)
.map { it.toLong() }