本文承接上一篇文章:让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程

本文同步自博主的私人博客wing的地方酒馆

上一节说到,kotlin可以省去getter,setter,和findviewbyid,可以看到已经能去除掉不少代码了。本篇再带给大家一篇秘笈,叫做函数扩展。

函数扩展是什么东东捏,一般来说,我们扩展一个类,需要去继承来实现,不过这样又要写N多代码呀~~ 标题说了,kotlin能让你的代码量减少至少3倍!不信?快来跟我看看!

来让我们先把布局的TextView换为一个Button

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.wingsofts.kotlindemo.MainActivity"
> <Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
</RelativeLayout>

假设我们实现这样一个效果,在MainActivity里,点击按钮,弹出Toast。

Java代码的话,大家都很轻车熟路了吧~~

Button button = findviewbyid(R.id.button)
button.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Toast.makeText(this,"hello java",Toast.LENGTH_SHORT);
}
});

是不是一大坨!!!虽然AS能生成代码,可是还是很臃肿啊。什么?你没觉得臃肿?那你看着我用kotlin给他开一刀。

    button.setOnClickListener {toast("hello kotlin")}

锵锵锵~你没看错。上面一大坨变成了这一句话。这是如何实现的呢。快来跟我一步一步动手简化吧!

去掉findviewbyid

之前说过,直接写id就可以拿到控件拉~~所以findviewbyid这句话省去了。

加入监听器

我们可以直接用lambda的哈,所以呢,可以写成这样

    button.setOnClickListener {
v:View -> Toast.makeText(this,"hello lambda",Toast.LENGTH_SHORT).show()
}

lambda不熟悉的话,快去谷歌一下用法哈~ 接下来呢,如果lambda左值参数没有用到的话,是可以省略的,所以现在写成了


button.setOnClickListener { Toast.makeText(this,"hello lambda",Toast.LENGTH_SHORT).show() }

呃。。看起来还是有点多,是不?别急,秘籍来了!

函数扩展

函数扩展可以让你对任意类进行扩展,而不用继承等等复杂的操作。

举个栗子!拿Toast来说,到处都可以用到,我们新建个kt文件,叫做ext

里面写上如下代码:

fun Context.toast(message:String,length : Int = Toast.LENGTH_SHORT){
Toast.makeText(this,message,length)
}

对!没错,加了这句话,就可以在所有Context类型中使用toast这个函数了。

具体的语法是 fun + 类型.函数(参数)

这断代码可以写在任意可以编译到的文件中,直的注意的是,如果写在了class内部,则是局部生效。

来看一下第二个参数,可以给默认值,如果参数不传,则自动调用默认值,这方便了什么?大家想想,没错!! 就是重载!!! 总之最终简化版点击按钮相应弹toast,代码就是一行!

    button.setOnClickListener {toast("hello kotlin")}

简直不能cool更多,你们觉得呢?

本文这就结束了(嫌文字太短?不要急啦,先去动手实践下咯。。系列文章,既然挖了坑,就不会拖更的(吧..))

如果你是Android开发者,那么你还可以来 wing的酒馆: 425983695 来分享你的开发经验哦

一个使用Kotlin开发的完整项目地址

让你的代码量减少3倍!使用kotlin开发Android(二) --秘笈!扩展函数的更多相关文章

  1. 让你的代码量减少3倍!使用kotlin开发Android(一)

    让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客:wing的地方酒馆 写在前面 使用kotlin开发android已经两周多了.得到的好处 ...

  2. 让你的代码量减少3倍!使用kotlin开发Android

    (一) 创建Kotlin工程 (二) –秘笈!扩展函数 (三) 缩短五倍的Java Bean 本项目使用的代码地址

  3. 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密

    上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏? 本文同步自博主的私人博客wing的地方酒馆 再来回顾一下,两种代码的对比 public class User { p ...

  4. 让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean

    回顾一下 哈,没想到你已经坚持不懈看到第三篇了,不错哈~坚持就是胜利. 本文同步自博主的私人博客wing的地方酒馆 在上一篇文章中,我们介绍了扩展函数,这里对上一篇进行一点小小的补充. 还记得text ...

  5. 让你的代码减少三倍!使用kotlin开发Android(五) 监听器

    本文同步自 博主的私人博客wing的地方酒馆 在前面的博客中,有一个栗子,是点击按钮转跳的监听器. button.setOnClickListener { val user = User(" ...

  6. Guava中这些Map的骚操作,让我的代码量减少了50%

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...

  7. 前端程序员的蜕变——JS的 event 对象属性、使用实例、兼容性处理(极大提高代码效率、减少代码量)

    下面讨论一下 js 中的 Event 对象,主要从以下三个方面详细的描述(点击标题可跳转到对应部分): 1.什么是event 2.怎么用event,用他该注意什么,几个简单实际应用 3.event在不 ...

  8. WPF INotifyPropertyChanged 通过特性减少代码量

    在很多地方需要用上INotifyPropertyChanged的接口,MVVM模式,List等集合都会用到. 通常我们使用 protected void OnChange(PropertyChange ...

  9. 想减少代码量,快设置一个有感知的 Aware Spring Bean

    摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ...

随机推荐

  1. ansible批量加用户

    ansible批量加用户 1.生成密码 pip install passlib python -c "from passlib.hash import sha512_crypt; print ...

  2. CF 472 div1 D. Contact ATC

    #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> # ...

  3. HTML5入门必知

    第一部分 认识HTML 一.认识HTML 1.HTML HTML:超文本标签语言Hyper Text Markup Language HTML:网页源代码. 浏览器:"解释和执行" ...

  4. MyBatis基础学习笔记--摘录

    1.MyBatis是什么? MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载.连接,创建statement,手动设置参 ...

  5. Java 嵌套类基础详解

    目录 1. 什么是嵌套类? 2. 为什么要使用嵌套类? 3. 嵌套类的类型 4. 静态嵌套类 5. 非静态嵌套类 5.1 成员内部类 5.2 局部内部类 5.3 匿名内部类 6. 嵌套接口 1. 什么 ...

  6. OpenGL平面阴影

    几种绘制阴影的方法 在OpenGL中,比较常见的绘制阴影的方法有:shadow mapping,shadow volumes以及一种在红宝书上提及的适合在确定平面上绘制阴影的方法. 平面阴影 在确定的 ...

  7. mybatis学习三

    Mybatis与pageHelper分页:    分页分为假分页和真分页对应的专业术语叫做逻辑分页和物理分页    逻辑分页:将所有的数据从数据库查询出来,根据需求截取符合要求的数据返回,方便统一但效 ...

  8. [HNOI 2016]树

    Description 题库链接 给你一棵 \(N\) 个节点根节点为 \(1\) 的有根树,结点的编号为 \(1\sim N\) :我们称这颗树为模板树.需要通过这棵模板树来构建一颗大树.构建过程如 ...

  9. bzoj 1558: [JSOI2009]等差数列

    Description Solution 把原数组变为差分数组,然后剩下的就十分显然了 区间查询用线段树维护 修改操作就是区间加法和两个单点修改 一个等差数列实际上就是 开头一个数字+数值相等的一段 ...

  10. [BZOJ]4162: shlw loves matrix II

    Time Limit: 30 Sec  Memory Limit: 128 MB Description 给定矩阵 M,请计算 M^n,并将其中每一个元素对 1000000007 取模输出. Inpu ...