zoukankan      html  css  js  c++  java
  • 让你的代码量减少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 来分享你的开发经验哦

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

  • 相关阅读:
    js的异步运行机制
    Android NDK 安装与配置
    JNI与NDK的区别
    Android 开发手记一NDK编程实例
    android AIDL服务
    Android Service学习之AIDL, Parcelable和远程服务
    Android中JNI的使用方法
    Android之drawable state各个属性详解
    android中的Touch研究
    Android中的ListView点击时的背景颜色设置
  • 原文地址:https://www.cnblogs.com/muyuge/p/6333507.html
Copyright © 2011-2022 走看看