Kotlin技术问询:List<E>构造赋值及Fragment设置POJO嵌套属性
嘿,这两个Kotlin的问题我熟,给你一步步讲清楚~
问题1:Kotlin中如何在List的构造参数中设置值?
Kotlin里的List是只读接口,我们很少直接用它的构造器,通常用标准库提供的工具方法来创建并初始化列表,分几种场景:
直接创建并初始化列表:
用listOf()创建只读列表,或者mutableListOf()创建可变列表,直接在括号里传初始化元素就行:// 只读List,初始化后不能修改元素 val fruitList: List<String> = listOf("苹果", "香蕉", "橙子") // 可变MutableList,后续可以添加/删除元素 val numberList: MutableList<Int> = mutableListOf(10, 20, 30)在类的构造参数中传入列表:
如果你的类构造函数需要接收List类型参数,创建类实例时直接把初始化好的列表传进去就行:// 定义一个带List参数的类 class Team(val memberNames: List<String>) // 创建实例时传入初始化好的List val devTeam = Team(listOf("张三", "李四", "王五"))用具体实现类(如ArrayList)构造:
要是你想用ArrayList的构造器,也可以直接传入元素集合,不过这种场景用listOf()更简洁:val arrayList = ArrayList(listOf("猫", "狗", "兔子")) // 或者先创建空列表再添加元素 val emptyArrayList = ArrayList<String>().apply { add("红") add("绿") add("蓝") }
问题2:在主Fragment中设置Account类的Address集合参数值?
先假设你的Address类是常见的POJO(比如这样):
class Address(var street: String?, var city: String?) : Serializable
结合你给的Account类代码,我们可以这样操作:
先创建Address对象并组装成List
在Fragment里,先实例化需要的Address对象,再用listOf()把它们组装成列表:// 创建两个Address实例 val homeAddr = Address("朝阳路123号", "北京") val officeAddr = Address("科技园45栋", "深圳") // 组装成List<Address> val addressList = listOf(homeAddr, officeAddr)给Account的Addresses属性赋值
分两种情况处理:- 如果已经创建了Account实例:
因为你的Addresses是var修饰的可空属性,直接赋值就行:// 假设已经通过无参构造创建了Account实例 val account = Account() // 给Addresses属性赋值 account.Addresses = addressList - 如果是创建Account实例时直接传入:
调用主构造函数,把组织好的列表传进去:val account = Account("XX科技有限公司", addressList)
- 如果已经创建了Account实例:
额外提示
如果你需要后续动态添加/删除Address元素,建议把Account里的Addresses类型改成MutableList<Address>?,这样可以直接操作列表:// 修改Account类的Addresses属性类型 class Account(var OrganizationName: String?, var Addresses: MutableList<Address>?) : Serializable { constructor() : this(null, null) } // 在Fragment中动态添加元素 account.Addresses?.add(Address("滨江路789号", "杭州"))另外,因为
Addresses是可空类型,操作时记得用?.处理空安全,避免空指针异常。
内容的提问来源于stack exchange,提问作者Keval Shukla
相关产品推荐
相关产品推荐

