Kotlin编程之if语句,while循环,when表达式,for循环
一、lateinit
和 by lazy
的区别
都代表延迟加载
by lazy { } 只能用在val
val name:String by lazy { "junlyuan" }
lateinit 只能用在var类型,lateinit不能用在可空的属性上和java的基本类型上
@Inject lateinit var person: Person
object 表达式
- 类似Java的匿名内部类。object:
// java写法
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
};
// kotlin写法
private val serviceConnection = object : ServiceConnection {
override fun onServiceConnected(name: ComponentName, service: IBinder) {
}
override fun onServiceDisconnected(name: ComponentName) {
}
}
只有一部分是静态常量
// java
private static final String TAG = Test.class.getSimpleName();
// kotlin
companion object {
private val TAG = MyAidlActivity::class.java.simpleName
}
静态类 / 静态方法
静态类
/**
* object修饰class -->静态类
* 所有的方法 变量都为静态方法/常量
*/
object Util {
const val TAG = "debugTag"
/**
* inline 内联函数:解释 {https://blog.csdn.net/Jaden_hool/article/details/78437947?locationNum=10&fps=1}
* noinline
* reified 具体化:解释 {https://www.jianshu.com/p/5dc6352783ba}
*/
inline fun <reified T : Activity> Context.toActivity() {
startActivity(Intent(this, T::class.java))
A.getStatic()
}
fun printTaskInfo(activity: Activity, methodName: String) {
log("${activity.localClassName} $methodName taskId = ${activity.taskId}")
}
private fun log(message: String, tag: String = TAG) {
Log.d(tag, message)
}
}
静态方法
/**
* 静态方法,
* 在Kotlin里静态方法可以通过“伴生对象”的方式实现。具体操作为:
* 在类的内部用companion object { }包裹所需的静态函数
*/
companion object {
fun getStatic() {
println("执行${Companion_Object_TAG}代码块")
}
const val Companion_Object_TAG = "Companion - Object - Tag"
}
inline 内联函数
noinline
reified 具体化