一、前言:
Kotlin当没有创建构造器时,与Java类似的是,与Java类似的就是当没有显示提供主函数时,Kotlin会为其生成一个无参构造。
二、对象创建几种方式的集合:
/**
* 方式1:
*/
data class RewardBean constructor(var index:Int?,var rewardId:String?) {}
/**
* 方式2:
*/
data class RewardBean(var index:Int?,var rewardId:String?) {
constructor() : this(null, null)
}
/**
* 方式3:
* 直接在构造器中定义类的属性
*/
class RewardBean(var index: Int, var rewardId: String) {}
/**
* 方式4:
* 初始化语句不是必须放在init代码块中的,也可以定义属性的时候初始化
*/
class RewardBean(index: Int, rewardId: String) {
var index: Int = index
val rewardId: String = rewardId
}
/**
* 方式5:
* 次构造函数,与主构造函数的区别就是,次构造函数定义在类中,可以有多个,但是主构造函数只会有一个
*/
class RewardBean {
val index: Int
val rewardId: String
constructor(index: Int, rewardId: String) {
this.rewardId = rewardId
this.index = index
}
}
/** 方式6:
* 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数
* 主构造函数是类头的一部分,跟在类名后面
* 在Java中,构造方法必须和类名相同,而在Kotlin中,是通过constructor关键字来标明的
*/
class RewardBean constructor(index: Int, rewardId: String) {
val index: Int
val rewardId: String
//在Kotlin中使用init初始化代码块,它的作用是为了主构造函数服务的,由于主构造函数是放在类首部的,是不能包含任何初始化执行语句的,这是语法规定的,那么这个时候就有了init的用武之地,
// 我们可以把初始化执行语句放置在此处,为属性进行赋值
init {
this.rewardId = rewardId
this.index = index
}
}
/**
* 方式7:
* 可将constructor关键字去掉
*/
class RewardBean(index: Int, rewardId: String) {
val index: Int
val rewardId: String
init {
this.rewardId = rewardId
this.index = index
}
}
/**
* 方式8:
* 无构造
*/
class RewardBean{
var index = 0
var rewardId =""
}
三、测试使用:
var list = mutableListOf<RewardBean>()
list.add(RewardBean(1,"11111"))
list.add(RewardBean(2,"22222"))
list.add(RewardBean(3,"33333"))
list.add(RewardBean(4,"44444"))
list.forEach {
Log.d("LUO", "当前id:${it.index}=====广告:${it.rewardId}")
}
网友评论