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

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

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

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

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死,然后她有一个实例,提供了一个方法。目前我的理解是这样的,如有错误,欢迎指出~~

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

欢迎加入Kotlin小乐园群(这是一个高质量、优秀的圈子):479109923

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

  1. Foodfox – самый быстрый и надежный сервис по доставке еды из
    лучших ресторанов в центре Москвы.
    Мы решили запустить наш сервис, когда сами столкнулись с проблемой заказа
    хорошей еды.
    Многие любимые рестораны не имели собственной доставки,
    а в тех, где она была, приходилось ждать еду по полтора часа.
    Теперь вы можете заказать прекрасную еду из любимых ресторанов и
    получить ее в самые кратчайшие сроки! https://ad.admitad.com/g/j73yeafmwv3022b28d9b781bb80eaa/

  2. Предлагаем новый суперсовременный сайт для поиска партнеров на 1 ночь, никаких смс и прочей нечисти, зайди и найди себе вторую половинку на ночь!
    Девушки и парни с любого города на планете уже в нашей базе!
    http://goo.gl/K5Llcc

  3. Как ты думаешь сможешь ли ты заработать миллион в 2017 году? С неба он не упадет, а если тебе просто дать миллион, то
    ты его просто бездумно потратишь. И если сравнить миллион с крупной рыбой, то я не дам тебе рыбу, но я дам тебе удочку для ловли. Дальше решать только тебе http://maks-simka.ru

  4. МоскваБелухин Дмитрий Николаевич класные русские сериалы в 2014 году и вынес свой П р и г о в о р .Хорошие русские сериалы есть !Например Пассажиры фильмы зрелищный в качестве HD и его можно скать торрентом. С уважением Белухин Д.Н

  5. Новая простая экономическая игра. Более 65 000 пользователей. Заработок происходит на сборе сырья от домашних животных. Доход можно вывести на банковскую карту, Киви или Payeer кошелек.
    Весь процесс идет независимо от Вас, чем больше животных тем больше заработок. Плюс огромный заработок дают приглашенные Вами друзья и просто пользователи,
    приглашенные по Вашей личной партнерской ссылке.
    Вся фишка этой игры в том, что вывод денег происходит моментально, выводите хоть по пять раз в день.
    Но советую деньги реинвестировать в новых животных, я именно так разогнал свой аккаунт, пока не получил около 100 рублей в час.
    Больших Вам заработков в Новом году. Регистрируйтесь и даже не сомневайтесь. При регистрации Вам бесплатно дадут несколько животных.
    Регистрация здесь http://maks-simka.ru

  6. Я делюсь секретами заработка в интернете и досконально все
    расписываю на моем секретном сайте: http://1-million-rubley.xyz

    Информация для поисковых систем: сколько можно заработать РЅР° играх РІ плей маркетекак заработать РІ интернете СЃ мобильного телефона qumoзарабатывать через интернет реально 1000 любовь3 заработать информации интернете информацию Рѕ том какиеможно ли честно заработать большие деньги fb2, программы для заработка денег РІ интернете скачать бесплатно100 заработок без вложений 500 рублей РІ деньсекреты заработка РІ интернете без вложений zimaдополнительный заработок кликах qiwiСЃРїРѕСЃРѕР±С‹ заработка фотографа 12 июля, каком сайте быстро заработать деньги 2016колесо фортуны заработок без вложений vipРёРіСЂС‹ для заработка денег без вложений СЂРѕСЃСЃРёРё hdРіРґРµ можно заработать деньги РІ 13 лет 98заработок РІ интернете фото 2016.

  7. Hello everybody! I yearn for to chew out tattle on you a diminutive roughly myself, I am fully a on easy street woman, I like to repudiate a note a smiling make a fool of and I weakness my job, I’m fine but there is no extension of a partner with whom I could just take sex. You glimpse conditions is the measure and money that would maintain to accomplishment I from no metre because dates and meetings that would virtuous talk. I just penury choleric shafting without commitment. Breast expanse 3 athletic, pulling, low growth. My photos are here http://sex911.top/MarryInvic There is a machine, and she can appear c rise, reasonable sire an apartment where you can come. If you are married, you can be your mistress. If you are interested then please correspond with or call.

  8. Я делюсь секретами заработка в интернете и досконально все
    расписываю на моем секретном сайте: http://1-million-rubley.xyz

    Информация для поисковых систем: копирайтинг СЃРїРѕСЃРѕР± заработкакак заработать первые деньги РІ интернете новичку маме декретекак сделать заработать деньги РІ интернете qiwi5 как понять РЅР° чем можно заработать деньгивиды заработка РІ интернете РЅР° СЃРјСЃ, заключается заработок интернете qiwiзаконный заработок интернете 2016интернет заработок выводом яндекс кошелек 2016как заработать РЅР° написании статей РІ интернете googleможно ли зарабатывать РЅР° покерстарс, как зарабатывать РЅР° сеоспринт РјРЅРѕРіРѕ денегпростой СЃРїРѕСЃРѕР± заработать деньгиработа РІ интернете развод или реальность отзывыгде зарабатывать РІ интернетезаработать РІ тенге интернете google.

  9. WEBPILOT is one of the leading Digital advertising agency in Dubai UAE, specialised in delivering full-service web solutions and digital marketing campaigns throughout UAE. Some of our most popular services include innovative web design, technical web development, search engine optimisation (SEO), content creation, eCommerce builds and social media strategy.

  10. Offer you the new site finding a partner for sex on 1 night, we have the huge database of profiles girls and boys!
    On our website first introduced the modern technology! We are the only one who uses a neural network for selection partners for sex 1 times job origin of data is needed to answer just couple simple questions, several clicks away! No huge text field to fill do not need.
    http://u.to/C6SqDw

  11. viagra 6 free sample viagra online without prescription overnight sildenafil online canada pharmacy online viagra canadian viagra canada viagra online without prescription Viagra online discount viagra online viagra online cheap

    hitest567e8

发表评论

电子邮件地址不会被公开。