当前位置: 首页 > 知识库问答 >
问题:

kotlin变量类型在运行时更改

朱俊雅
2023-03-14

我在android和Kotlin有奇怪的问题。问题是我用ArrayList 类型定义变量,但在运行时更改为ArrayList

我这样定义我的变量:

私有var mdivideEntityValue:arrayList =arrayListOf()

// mDivideEntity is string variable store in json array like: ["150","30"]
mDivideEntityValue = Gson().fromJson(mDivideEntity.amounts, ArrayList<Long>()::class.java)

我使用kotlin 1.3.71和jvm 1.8。

更新0:

共有1个答案

袁旻
2023-03-14

Json没有不同的数字类型,因此默认情况下,所有数字都被解析为double。当将ArrayList 传递给fromjson()时,由于类型擦除,Gson无法看到 类型。当将类类型传递给Java库时,不妨使用<*>作为类型。

Kotlin允许将返回的ArrayList 分配给您的ArrayList 属性,因为在运行时它不能区分不同(类型擦除)。

但是,数组确实有具体化的类型。这可能会起作用(没有测试):

val divideEntityValue = Gson().fromJson(mDivideEntity.amounts, LongArray::class.java)
mDivideEntityValue = Gson().fromJson(mDivideEntity.amounts, ArrayList::class.java)
    .map { it.toLong() }
 类似资料:
  • 问题内容: Java中有没有办法反映局部变量的通用类型?我知道您可以通过一个字段来解决这个问题- 获取泛型类型的java.util.List。任何想法如何解决,例如: 或更笼统: 问题答案: 这是一个很好的教程,显示了如何以及何时可以使用反射读取泛型。例如从firs 方法获取String 您可以使用此代码 输出: parameterArgClass =类java.lang.String 可能是因为

  • 问题内容: 我几乎没有这样声明的C函数 我想将这些作为一个Go函数公开 所以我需要能够在运行时检查 参数 类型。我该怎么做,这是个好主意吗(如果不是,在这种情况下,什么是好的做法)? 问题答案: 在此处查看类型断言: http://golang.org/ref/spec#Type_assertions 我只断言一个明智的类型(字符串,uint64)等,并使其尽可能宽松,最后执行到本机类型的转换。

  • 问题内容: 更新(2020年9月) :Python 3.9包含此用例的功能,请参阅https://docs.python.org/3.9/library/typing.html#typing.get_type_hints 我正在尝试编写一个使用Python 3.6类型提示的函数装饰器,以检查参数字典是否尊重类型提示,并且如果未出现带有问题清晰说明的错误,则将其用于HTTP API。 问题是,当函数

  • 是否可以使用非类型变量模板进行运行时计算? 想象一下以下情况: 方法应该返回给定整数在模板参数包中的位置。如果参数包中不存在给定的整数,则应生成错误(最好是在编译时)。 另外,我知道如果签名改为 不幸的是,这不是我的选择,因为方法应该是虚拟的。

  • 我试图编写一个函数装饰器,它使用Python 3.6类型提示来检查参数字典是否尊重类型提示,如果没有清晰描述问题,则会产生错误,用于HTTP API。 问题是,当函数有一个使用类型的参数时,我无法在运行时对照它检查变量。 比如我有这个功能 我可以做到: 但不是: 因为不能与或一起使用。 我找不到使用type对象检查它的方法。我试图自己实现检查,但当显示为我不能在运行时访问类型列表,如果不使用检查。

  • 我写了一个程序,用莱布尼茨公式计算PI数: 我写了一个初始化类型为“int”的for循环,循环工作正常,但是当我将初始化类型更改为“long”时,结果会发生变化。这只发生在循环次数超过十亿次的时候。这使得“int循环”计算PI比“long循环”更准确。我不知道为什么会发生这种情况。请帮助我理解这个问题。谢谢!这是我的代码。 结果是: