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

原创 2016年11月01日 18:28:40

上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏?

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

再来回顾一下,两种代码的对比

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;
}



data class User(var name: String, var id: String)

可以发现,代码是少了,但是好像不太一样,为什么呢? 可能很多人会有这样的疑问,在java bean中 通常会将成员变量设为私有,不对外开放,并且提供getter,setter来提供对外访问,可是kotlin bean确没有。于是你开始尝试对data class扩充,并且发现。。如果设置了private 就不能提供getter,setter了。

如果你有疑问,请继续看下去。唯一看透真相的是外表看似大人,但大脑萎缩只有儿童智商的名侦探wing!
名侦探wing

线索

大家都知道。。kotlin是运行在jvm的语言,所以理所当然的,他是遵循jvm虚拟机规范的,也就是说生成的都是class文件,所以我们可以反编译class为java语言,那他与java做个对比。就可以明确的得到我们想要的答案。

首先建立一个kt文件,键入如下内容:

class User(){
    public var name:String = "hah"
}

明显这是一个User类,他具有一个String成员name,这时候在命令行使用kot
linc编译:

kotlinc user.kt

得到一个class文件,将class用JD_GUI打开可以得到如下代码:

public final class User
{


  @NotNull
  private String name = "hah";


  @NotNull
  public final String getName() { return this.name; } 
  public final void setName(@NotNull String <set-?>) { Intrinsics.checkParameterIsNotNull(<set-?>, "<set-?>"); this.name = <set-?>;
  }
}

诺,真相大白了,事实说明在kotlin中,不需要private并且通过getter与setter,因为由以上结论得出kotlin中的public等价于java中private + getter + setter!!!

嗯哼?这下有没有解决你的疑虑?我们可以顺便看看伴生对象是如何实现的。

class User(){
public var name:String = "hah"




companion object{
   fun getName():String{
        return "name"
}
}
}

反编译以后,与user.class同级目录下会多处一个User$Companion.class的文件,他就是user的伴生对象了,查看对应java代码如下:

public final class User$Companion
{
  @NotNull
  public final String getName()
  {
    return "name";
  }
}

看到其实伴生对象并不是static实现的,所以说跟static还是有区别的,既然是object 那么应该就不是class ,或者说这个class只有一个实例,可以说另一种奇葩的单利模式吧。总之这个对象会跟随user生,跟随user死,然后她有一个实例,提供了一个方法。目前我的理解是这样的,如有错误,欢迎指出~~

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

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

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

版权声明:本文为博主原创文章,欢迎注明出处后转载。

让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程

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

kotlin-for-android简介 (让你的Android代码更简洁)

Kotlin是众多基于JVM的语言之一,它一开始是作为android 开发中java语言的可能的代替者出现的。java是世界上使用最多的语言之一,而伴随着其他语言的发展使得程序员编程越来越容易,...
  • bboyfeiyu
  • bboyfeiyu
  • 2015年03月26日 18:15
  • 4264

androidstudio使用kotlin开发APP

前言 嗯,然后的然后,今天有Qcon大会哈,很不错哈,公司有5张门票,嗯,明天过去看看。Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。Kotlin可以编译成Ja...
  • qq_30219217
  • qq_30219217
  • 2017年06月17日 16:33
  • 878

使用Kotlin开发Android项目(一)

文中项目参照Kotlin for Android Developers 一、为什么应该学习Kotlin 1.Kotlin编译成JVM字节码或JavaScript——这不仅会吸引Java开发...
  • phantom3792
  • phantom3792
  • 2017年04月13日 20:34
  • 4751

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

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

【Android】使用Kotlin在Android Studio上开发App

前言嗯,然后的然后,今天有Qcon大会哈,很不错哈,公司有5张门票,嗯,明天过去看看。Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节...
  • qq_25867141
  • qq_25867141
  • 2016年10月20日 17:49
  • 8470

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

本文承接上一篇文章:让你的代码量减少3倍!使用kotlin开发Android(一) 创建Kotlin工程 本文同步自博主的私人博客wing的地方酒馆 上一节说到,kotlin可以省去getter,...
  • wingichoy
  • wingichoy
  • 2016年10月13日 23:12
  • 5006

Kotlin开发android:一个简单的登陆例子

首先当然是添加依赖了 project的gradle 项目的gradle文件 module的gradle 然后是mvp模式的包结构 ...
  • weixin_37730482
  • weixin_37730482
  • 2017年06月23日 10:45
  • 746

使用Kotlin开发Android应用初体验

使用Kotlin开发Android应用初体验昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,作为一名Android开发鸟,怎么能不及时尝尝鲜呢?Kotlin的简要介绍在开发之前,很...
  • u011064099
  • u011064099
  • 2017年05月18日 17:20
  • 14291

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

写在前面 使用kotlin开发android已经两周多了。得到的好处太多,敲代码简直是爽的飞起。kotlin简单,易用,代码量少。这么爽的东西,不敢私藏,所以写出来与大家分享。 可能标题说减少3倍...
  • wingichoy
  • wingichoy
  • 2016年10月08日 10:03
  • 6728
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密
举报原因:
原因补充:

(最多只允许输入30个字)