Koltin-用法总结
来源:互联网 发布:mac系统占用100g 编辑:程序博客网 时间:2024/05/14 02:01
1. Kotlin配置
点击菜单栏的“Tools”选项,选择“Kotlin”,然后选择“Configure Kotlin in Project”。如下图所示。
在弹出的窗口中选择需要使用Kotlin的模块和Kotlin编译器和运行时的版本,如下图所示。
点击“OK”之后,Kotlin插件会自动开始配置。配置完成之后,同步一下工程(Sync Project)即可。
推荐配置
:打开模块下的build.gradle文件,在apply plugin: ‘kotlin-android’下面加入一行:apply plugin: ‘kotlin-android-extensions’。这是一个Kotlin的扩展模块,可以让Activity自动关联xml布局中的View而不需要findViewById。
2. Anko的使用
在官方库Anko
的支持下,有了很多变化
2.1 向findViewById告别
val onlyTv = find<TextView>(R.id.onlyTv)val onlyTv: TextView = find(R.id.onlyTv)
在导入一个插件kotlin-android-extensions
,变得更简单了
直接使用在布局中定义的id为hello的这个textView
2.2 简单粗暴的startActivity
//原本的样子Intent intent = new Intent(LoginActivity.this, MainActivity.class);intent.putExtra("name", "张三");intent.putExtra("age", 27);startActivity(intent);//在Kotlin中的表现startActivity<MainActivity>()startActivity<MainActivity>("name" to "张三", "age" to 27)startActivityForResult<MainActivity>(101, "name" to "张三", "age" to 27)
2.3 封装Toast
//原来样子Toast.makeText(context, "this is a toast", Toast.LENGTH_SHORT).show();//现在样子context.toast("this is a toast")
2.4 DSL编程(接下来补充)
2.5 简化异步操作
//有了Anko的配合,蜜汁缩进
Alt text
2.6 简化日志打印
实现AnkoLogger
这个接口,方便打印日志
Tag为所在类的类名
3. 其他方法
3.1 用apply方法进行数据组合
//例如//创建三个类class A(val b: B)class B(val c: C)class C(val content: String)//用Java方法进行数据组合C c = new C("content");B b = new B(c);A a = new A(b);//使用apply方法进行数据组合val a = A().apply { b = B().apply { c = C("content") }}//在DSL编程汇中的写法layout.addView(TextView(context).apply { text = "这是文本内容" textSize = 16f})
只需声明一个变量。这里我们只声明了一个 a 对象,然后初始化了一个 A,在这个初始化的对象中先给 B 赋值,然后再提交给了 a。
3.2 利用扩展类代替工具类
我做字符串判断的时候一定会写一个工具类,在这个工具类里充斥着各种各样的判断方法。而在 Kotlin 中,可以用扩展方法来替代。
//String的扩展类fun String.isName(): Boolean { if (isEmpty() || length > 10 || contains(" ")) { return false } val reg = Regex("^[a-zA-Z0-9\u4e00-\u9fa5]+$") return reg.matches(this)}fun String.isPassword(): Boolean { return length in 6..12}fun String.isNumber(): Boolean { val regEx = "^-?[0-9]+$" val pat = Pattern.compile(regEx) val mat = pat.matcher(this) return mat.find()}...println("张三".isName())println("123abc".isPassword())println("123456".isNumber())//ImageView的扩展类fun ImageView.displayUrl(url: String?) { if (url == null || url.isEmpty() || url == "url") { imageResource = R.mipmap.ic_launcher } else { Glide.with(context) .load(ColumnServer.SERVER_URL + url) .into(this) }}...val imageView = findViewById(R.id.avatarIv) as ImageViewimageView.displayUrl(url)
3.3 委托/代理,SharedPreference 不再麻烦(还需要研究)
3.4 数据类的自动getter/setter及class简洁的写法
//Java代码
class Person { private String name; public Person(String name) { this.name = name; } public void setName(String name) { this.name = name; } public void getName() { return name; }}Person person = new Person("张三");
//Kotlin代码
class Person(var name: String)val person = Person("张三")//添加默认值class Person(var name: String = "张三")val person = Person()
3.5 实现单例
//Java中单例
public class Singleton { private static Singleton instance = null; private Singleton(){ } private synchronized static void createInstance() { if (instance == null) { instance = new Singleton(); } } public static Singleton getInstance() { if (instance == null) createInstance(); return instance; }}
//而在Kotlin中,只用一句话表示
object Singleton{}
3.6 容器的操作符(接下来补充)
3.7 with的用法
with函数是一个单独的函数,并不是Kotlin中的extension,所以调用方式有点不一样,返回是最后一行,然后可以直接调用对象的方法
当一个对象实例需要调用多个方法
fun alphabet(): String { val stringBuilder = StringBuilder() return with(stringBuilder) { for (letter in 'A'..'Z') { this.append(letter) } append("\nNow I know the alphabet!") this.toString() }}
3.8 伴生对象
每个类都可以实现一个伴生对象,它是该类的所有实例共有的对象。它将类似于Java中的静态字段。
class App : Application() { companion object { //lateinit表示这个属性开始是没有值得,但是,在使用前将被赋值 lateinit var instance: App //private set用于说明外部类不能对其进行赋值。 private set } override fun onCreate() { super.onCreate() instance = this }}
3.9 创建匿名类的实现
recycler.adapter = object : RecyclerView.Adapter() { override fun onBindViewHolder(holder: RecyclerView.ViewHolder?, position: Int) { } override fun getItemCount(): Int { } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): RecyclerView.ViewHolder { }}
3.10 最终类
使用sealed
关键字修饰
sealed class SealedClassTest { object getStop : Opertion() object getStart : Opertion()}
3.11 延迟属性
val emails by lazy { loadEmails(this) }
3.12 委托类/代理属性(by)
Kotlin-代理属性(by)
使用by关键字
`使用了委托模式:为其他对象提供了一种代理以控制这个对象的访问
- 延迟加载属性(lazy property): 属性值只在初次访问时才会计算,
- 可观察属性(observable property): 属性发生变化时, 可以向监听器发送通知,
- 将多个属性保存在一个 map 内, 而不是保存在多个独立的域内.
//Kotlin中,委托的实现依靠于关键字 by ,by表示将抽象主题的实例(by后边的实例)保存在代理类实例的内部,比如SportsManager类继承于ISports接口,并可以ISports接口的所有的 public 方法委托给一个指定的对象。interface ISports { fun doSports()}class SwimForSports: ISports{ override fun doSports() { println("do swim") }}class SportsManager(sport: ISports): ISports by sportfun main(args: Array<String>) { val swimSports: SwimForSports = SwimForSports() SportsManager(swimSports).doSports()// Log:do swim}
参考:
Kotlin学习
用Kotlin写Android 01 难道只有环境搭建这么简单?
用 Kotlin 写 Android 02 说说 Anko
用 Kotlin 开发 Android 项目是一种什么样的感受?
用 Kotlin 开发 Android 项目是一种什么样的感受?(二)
- Koltin-用法总结
- Koltin 函数
- Koltin Any 类型
- koltin学习教程 androidstudio 使用koltin 语言编程
- Koltin简明学习,解构声明
- Koltin 使用Lambda来设置回调
- Koltin简明学习,also,takeIf,takeUnless
- koltin 防止控制针的方法
- Koltin数据类之解构申明
- 解决Koltin和DataBinding冲突 Unresolved reference: databinding
- Koltin简明学习,扩展方法和扩展属性
- Koltin简明学习,操作符重载(Operator overloading)
- Koltin-let apply also run with的比较
- const用法总结
- static用法总结
- PropertyGrid用法总结
- static用法总结
- sizeof 用法总结(转)
- 如何做用户行为路径分析?
- 如何封装一个既可以纯代码写的也可以xib拖拽的自定义控件
- android手动 v2 签名
- HTML5中a标签的锚点使用
- eclipse3.7 安装 maven
- Koltin-用法总结
- NOIP2017提高组 模拟赛21(总结)
- 2017新零售与人工智能论坛— Focussend浅谈智能化营销如何助力重构零售消费场景
- 恩智浦IMX6开发板选哪家?迅为imx6开发板平台运行怎么样?
- 德式秘籍:产品总监最该学会的管理方法是什么?(一)
- 作业1
- 来吧,我教你画真正的流程图
- LDAP详解
- 如何更好的解决问题 : The puzzle of die