kotlin
常见问题
1.没有命名空间
可以将所有方法归类到Object 类中:
2.没有静态修饰语
1.在Kotlin中,可以使用两种方法来停止自动生成get和set方法。
使用const关键字 例子://val 表示常量 const val INTENT_IS_COLLECT = "isCollect"
使用@JvmField注解
3.Java自动转换成kotlin
javadoc原来的结构会被破坏掉,静态field和方法会转换成companion object中的普通声明,如果有Java代码调用这个类,就会出现点问题,除非你后面手动给这个转换后的companion object 添加上@JvmField和@JvmStatic
4.kotlin的class默认是final,不能够被继承
open来表示这个类是可以继承的
5.如何在kotlin中避免自动生成set或者get代码
1.使用const关键字 2.使用@JvmField注解
3.lateinit 本身的含义是延迟初始化,但是在编译时必须保证 lateinit 修饰 的参数被初始化,否则编译不过去的private
lateinit var adapter : AndroidHomeAdapter
//如果编译不过,则可以使用下面这种写法
//private var adapter1 : AndroidHomeAdapter ? = null
6. 使用companion object有什么好处
当你的类包含太多的东西,你想把它们隔离到另外一个类,又不想使用类引用的方式,你就可以使用companion object。
companion object的好处是,外部类可以直接访问对象,不需要通过对象指针
class AndroidDetailActivity : WebViewActivity() , AndroidCollectContract.View{
//companion object的好处是,外部类可以直接访问对象,不需要通过对象指针
companion object {
const val INTENT_TAG_HOME_DATA = "homeData"
const val INTENT_TAG_BOOLEAN_IS_COLLECT = "isCollect"
const val INTENT_TAG_INT_ARTICLE_ID = "articleId"
fun lunch(context: Activity?, homeData: HomeData, isCollect: Boolean, articleId: Int) {
val intent = Intent(context, AndroidDetailActivity::class.java)
intent.putExtra(INTENT_TAG_HOME_DATA, homeData)
intent.putExtra(INTENT_TAG_BOOLEAN_IS_COLLECT, isCollect)
intent.putExtra(INTENT_TAG_INT_ARTICLE_ID, articleId)
context?.startActivity(intent)
}
}
}
//如何引用
AndroidDetailActivity.lunch(activity, homeData, homeData.collect, homeData.id)
7. kotlin中有哪些方式可以实现单利模式
学习记录,后面不断补充完善。。。