kotlin 的扩展方法真的太神了。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pdog18
V2EX    Android

kotlin 的扩展方法真的太神了。

  •  
  •   pdog18 2018-03-18 11:11:40 +08:00 18199 次点击
    这是一个创建于 2776 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚看 kotlin 两天,其他一些我顶多以为是语法糖或者将某些错误提前到编译期。 但是这个语法糖真的是太溜了,还可以对Int类型直接操作,我想要写dp的话 直接用 16.dp()就可以了,简直不要太舒服。

    另外吐槽下泛型,Java 的各种 extends,super 的泛型怎么写还没搞明白,复杂一点的泛型每次都要百度 ,来学 kotlin 的泛型我估计要完全搞乱了

    第 1 条附言    2018-03-18 22:06:08 +08:00

    又看到了 inline关键字,居然还可以提高性能,好溜哇

    21 条回复    2020-10-20 13:46:31 +08:00
    secondwtq
        1
    secondwtq  
       2018-03-18 11:13:57 +08:00
    语法糖比较 trivial 也就算了,“将某些错误提前到编译期” 在楼主的眼中也那么的 trivial 么?
    ian19znj
        2
    ian19znj  
       2018-03-18 11:18:39 +08:00 via iPhone   4
    c#扩展方法了解一下
    jackyzy823
        3
    jackyzy823  
       2018-03-18 11:25:27 +08:00
    D 语言的 Uniform Function Call Syntax (UFCS) 了解一下 (算了太小众了
    pdog18
        4
    pdog18  
    OP
       2018-03-18 11:32:45 +08:00
    @secondwtq 新手嘛,现在感觉不强烈嘛,哈哈
    pdog18
        5
    pdog18  
    OP
       2018-03-18 11:33:03 +08:00
    你们讲的这些都不知道哇
    gs139
        6
    gs139  
       2018-03-18 11:45:03 +08:00 via Android
    跟 js,ruby 学的,这种特性尽量别用,容易污染
    aminic
        7
    aminic  
       2018-03-18 11:45:40 +08:00 via Android   1
    请 C#程序员不要吐槽
    ian19znj
        8
    ian19znj  
       2018-03-18 11:55:03 +08:00 via iPhone
    @aminic c#被鄙视惯了,难得傲娇一下,见谅
    gam2046
        9
    gam2046  
       2018-03-18 11:59:42 +08:00
    确实,虽然是语法糖,但是糖确实好吃。

    扩展方法用于做一些工具方法感觉挺方便的。例如

    fun Any.toJsonString()
    fun String.toJsonObject()

    不过关于泛型,kotlin 有一些不同(也不能算坑吧),比如 Map<String>和 Map<Int>并不是一个类型,也不能转换,虽然 Java 在编译后会进行类型擦除,这两个在运行时期是一样的,但是 kotlin 在编译时期的检查就是认为不一样。
    pdog18
        10
    pdog18  
    OP
       2018-03-18 12:08:08 +08:00
    `fun Any.toJsonString() ` 这个感觉很甜啊。大佬大佬还有哪些
    AntiGameZ
        11
    AntiGameZ  
       2018-03-18 13:01:24 +08:00
    每次看到这种帖子的时候,我内心都想骂一下微软的不争气。
    otakustay
        12
    otakustay  
       2018-03-18 13:16:53 +08:00   1
    根据玩 C#的经验,如果第三方库喜欢定义扩展方法,多起来冲突了还是很烦人的
    lizhuoli
        13
    lizhuoli  
       2018-03-18 13:29:30 +08:00 via iPhone   1
    C# D Objective-C Swift Ruby 程序员表示你这不是语言第一课的知识吗
    shnoparty
        14
    shnoparty  
       2018-03-18 13:33:52 +08:00 via iPhone
    Kotlin 出的各种 DSL 了解一下
    wellsc
        15
    wellsc  
       2018-03-18 13:37:54 +08:00 via iPhone
    很 Ruby,但我不喜欢
    bobuick
        16
    bobuick  
       2018-03-18 13:51:57 +08:00   1
    最近看 scala,kotlin 这种专门发明用来处处针对 java 的语言,也是可爱的很 =。=
    HangoX
        17
    HangoX  
       2018-03-18 23:22:49 +08:00 via Android
    你去看一下 groovy 会更惊讶吧,当然还有 swift
    AngelCriss
        18
    AngelCriss  
       2018-03-18 23:58:34 +08:00
    @jackyzy823 不不不,Rust 也有
    iFlicker
        19
    iFlicker  
       2018-03-19 00:40:51 +08:00 via Android
    groovy 很神奇的
    mmdsun
        20
    mmdsun  
       2018-03-20 10:53:30 +08:00
    kotlin 很多地方参考了 c# 我看 kotlin 文档看不懂 都去 msdn 查资料 滑稽
    amok
        21
    amok  
       2020-10-20 13:46:31 +08:00
    lambda 是通过 new 匿名类实现的,inline 是为了避免 lambda 在循环之类的开销
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2655 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:54 PVG 22:54 LAX 07:54 JFK 10:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86