让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean
回顾一下
哈,没想到你已经坚持不懈看到第三篇了,不错哈~坚持就是胜利。 
本文同步自博主的私人博客wing的地方酒馆
在上一篇文章中,我们介绍了扩展函数,这里对上一篇进行一点小小的补充。
还记得textview是如何setText()的吗
textView.text = "hello kotlin"不知道你有没有想过,这个.text是如何实现的呢。 哈哈,其实你们大概已经猜到了。就是通过扩展函数实现的
public  var TextView.text:  CharSequence
  get() =   getText()
  set(v)    =   setText(v)
开始今天的内容
今天介绍的是一种叫做数据类的类,他没有什么功能,只负责储存数据,也就是我们常说的Java Bean,通常,在Java语言里,我们定义一个实体,是这样的
public class User {
    private String name;
    private String id;
    public User(String name, String id) {
        this.name = name;
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
}
可以看到,仅仅两个属性,加上getter setter有这么多代码。那么kotlin是什么样子呢?
data class User(var name: String, var id: String)你不要说我了个擦,这确实是全部代码。。没有少东西了。可以看到语法,括号里跟着参数,也是一种构造器。并且不用getter setter。
使用的时候正常使用就可以了。
val user = User("wing","222")
    user.id = "300"这里提到一点,var 和val的区别。var一般是变量,val一般是常亮,即不可变量,也多用于只是用一次的变量。
这里你可能有疑问了,如果构造器是单参或者空参的呢? 语法如下:
class User {
    var name: String? = null
    var id: String? = null
    constructor(name: String) {
        this.name = name
    }
    constructor(name: String, id: String) {
        this.name = name
        this.id = id
    }
}
举个栗子
接下来以一个点击按钮,传递数据类向下一个Activity为栗子,把之前的知识应用一下。
首先,新建一个SecondActivity,提供一个静态方法,用于Activity的转跳。想必大家都知道这样的好处,就是让调用者不必看源码就知道需要什么参数。如果你按照java写,就会发现没有static这个关键字!不要慌,这里可以使用 伴生对象 来实现。伴生对象是伴随这个类声明周期的对象~下面看详细用法。
class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        toast(intent.getStringExtra(USER))
    }
   //创建一个伴生对象
    companion object{
        //extra的key
        val USER = "USER"
        fun startActivity(context: Context,user:User ){
            val intent = Intent(context,SecondActivity::class.java)
            intent.putExtra(USER,user)
            context.startActivity(intent)
        }
    }
}在第一个Activity中,给按钮设置监听器,同时转跳到第二个Activity并且传递User对象。
class MainActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    button.setOnClickListener {
      val user = User("name")
      user.id = "100"
      SecondActivity.startActivity(this,user)
    }
  }
}
大功告成了!接下来运行下apk,看看第二个Activity成功接收到了传递的User(对了别忘了把User序列化).
对比一下,嗯哼?比Java少了多少? 有没有很爽啊哈。 
本文这就结束了(嫌文字太短?不要急啦,先去动手实践下咯。。系列文章,既然挖了坑,就不会拖更的(吧..))
如果你是Android开发者,那么你还可以来 wing的酒馆: 425983695 来分享你的开发经验哦
让你的代码量减少3倍!使用kotlin开发Android(三) 缩短五倍的Java Bean的更多相关文章
- 让你的代码减少三倍!使用kotlin开发Android(五) 监听器
		本文同步自 博主的私人博客wing的地方酒馆 在前面的博客中,有一个栗子,是点击按钮转跳的监听器. button.setOnClickListener { val user = User(" ... 
- 让你的代码量减少3倍!使用kotlin开发Android
		(一) 创建Kotlin工程 (二) –秘笈!扩展函数 (三) 缩短五倍的Java Bean 本项目使用的代码地址 
- 让你的代码量减少3倍!使用kotlin开发Android(二) --秘笈!扩展函数
		本文承接上一篇文章:让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客wing的地方酒馆 上一节说到,kotlin可以省去getter,se ... 
- 让你的代码量减少3倍!使用kotlin开发Android(一)
		让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客:wing的地方酒馆 写在前面 使用kotlin开发android已经两周多了.得到的好处 ... 
- 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密
		上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏? 本文同步自博主的私人博客wing的地方酒馆 再来回顾一下,两种代码的对比 public class User { p ... 
- Guava中这些Map的骚操作,让我的代码量减少了50%
		原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ... 
- 前端程序员的蜕变——JS的 event 对象属性、使用实例、兼容性处理(极大提高代码效率、减少代码量)
		下面讨论一下 js 中的 Event 对象,主要从以下三个方面详细的描述(点击标题可跳转到对应部分): 1.什么是event 2.怎么用event,用他该注意什么,几个简单实际应用 3.event在不 ... 
- WPF INotifyPropertyChanged 通过特性减少代码量
		在很多地方需要用上INotifyPropertyChanged的接口,MVVM模式,List等集合都会用到. 通常我们使用 protected void OnChange(PropertyChange ... 
- 想减少代码量,快设置一个有感知的 Aware Spring Bean
		摘要:正常情况下,Spring 中的 Bean 对 Spring 是无感知的,Spring 框架提供了这种扩展能力,能让一个 bean 成为有感知的. 本文分享自华为云社区<有感知的 Aware ... 
随机推荐
- 教你如何用AST语法树对代码“动手脚”
			个推安卓工程师,负责公司移动端项目的架构和开发,主导移动端日志管理平台系统架构和开发工作,熟悉前后端的技术线,参与个推SDK主要业务研发工作,善于解决项目中遇到的痛点问题. 作为程序猿,每天都在写代码 ... 
- freeplane使用指南
			网上freeplane的详细使用好像比较少,全面的也就官方的英文版文档. 喜欢freeplane的原因仅仅是因为大标题的文字与内边距可以调节,xmind等其他的导图好像都是不能调节的. 心一狠,凭着半 ... 
- [LeetCode] Base 7 基数七
			Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ... 
- codevs 1006 等差数列
			提交地址:http://codevs.cn/problem/1006/ 1006 等差数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Des ... 
- 因数(factor)
			一个最基本的算数法则就是大于1的整数都能用1个或多个素数相乘的形式表示出来.当然,有多种质因子排列方案 如: 10=2×5=5×2 20=5×2×2=2×5×2=2×2×5 用f(k)表示k的质 ... 
- [USACO07NOV]牛继电器Cow Relays
			题目描述 给出一张无向连通图,求S到E经过k条边的最短路. 输入输出样例 输入样例#1: 2 6 6 4 11 4 6 4 4 8 8 4 9 6 6 8 2 6 9 3 8 9 输出样例#1: 10 ... 
- USACO 2017 January Platinum
			因为之前忘做了,赶紧补上. T1.Promotion Counting 题目大意:给定一个以1为根的N个节点的树(N<=100,000),每个节点有一个权值,对于每个节点求出权值比它大的子孙的个 ... 
- [bzoj4906][BeiJing2017]喷式水战改
			来自FallDream的博客,未经允许,请勿转载,谢谢. [题目背景] 拿到了飞机的驾照(?),这样补给就不愁了 XXXX年XX月XX日 拿到了喷气机(??)的驾照,这样就飞得更快了 XXXX年XX月 ... 
- Simpson积分(BZOJ2178)
			lrj的代码常数太大T了QAQ,改了一下. #include <cstdio> #include <cmath> #include <algorithm> usin ... 
- jQuery Datetable 渲染
			渲染器 有些情况下,使用表时,表中的行的数据源不包含您希望在表中直接显示的值.您可能希望将其转换为不同的表示形式(时间戳为人类可读的格式),合并数据点(名字和姓氏)或对该值执行一些计算(计算营业额和费 ... 
