去年 5 月份的 Google I/O 上,谷歌宣布 Kotlin-first,Kotlin 开始成为 Android 开发者的首选语言,接着谷歌针对 Kotlin 的相关建设不断。

本文简介 Java 迁移到 Kotlin 指南相关

就在今年,上周,谷歌刚刚推出免费的 Kotlin 和 Android 在线课程,教开发者使用 Kotlin 构建 Android 应用。很快,Google Home 团队也现身说法,通过自身经历,展示了 Kotlin 开发的好处。

开始从 Java 迁移到 Kotlin

谷歌建议“由点及面”进行迁移,包括人与代码两个层面:
人的层面,团队内部推举出一位 Kotlin “推广大使”,他需要做到:

  • 了解 Kotlin 并成为专家
  • 制定 Kotlin 开发流程
  • 参与代码审核,确保 Kotlin 开发流程得到顺利贯彻
  • 组建公司/团队内部的学习小组
  • 主动收集内部的问题并与开发者社区反馈探讨

而代码层面,需要做到:

  • 先使用 Kotlin 编写测试(此时项目依然在使用 Java)
  • 使用 Kotlin 编写新代码
  • 将现有代码更新为 Kotlin 代码

在将现有代码更新为 Kotlin 代码时,可以直接使用 Android Studio 提供的 Java 转 Kotlin 工具,只需要在菜单中选择 “Code → Convert Java File to Kotlin File” 即可:

Java 转 Kotlin 工具

另外,Kotlin 的迁移工作没必要一蹴而就,开发者可以按照自己的进度来逐步进行迁移。一个项目中可以同时包含 .java 和 .kt 文件,但同一个文件中不可以既有 Java 也有 Kotlin,开发者也可以在 Kotlin 代码中使用任何 Java 库。

△ Android Studio 的 Lint 检查中也可以打开 Kotlin 互操作检查

在 Kotlin 中调用 Java 时,有几点需要注意
1、将代码标记为 @Nullable 和 @NotNull
2、使用属性前缀(getName(), setName(), isActive())
3、避免使用 Kotlin 中的保留关键字(when、is 等)

最后,谷歌工程师怎么看

作为一门 JVM 语言,一门兼容甚至被认为要取代 Java 的语言,Kotlin 的出场也往往伴随着与 Java 的比较。谷歌甚至推出了从 Java 迁移到 Kotlin 的官方指南。部分 Android 开发者仍在犹豫是否要转到 Kotlin,有一些人已经从 Java 迁移到 Kotlin 又迁回了 Java。在一年前 Dice 网站发布的调查中,85% 的受访者几乎一边倒地选择仍旧使用 Java 来构建 Android 应用程序。

但其实在谷歌工程师看来,并没有必要将二者完全划清界限。Android Studio 技术负责人 Jeffrey van Gogh 就曾讲过,Java 与 Kotlin 具有极高的互操作性,所以两者完全可以共存于同一个项目中。目前如 Google Home 这样的谷歌自家应用,不少都采用这种融合式做法,Kotlin 更多地被用来编写新功能。

那么,再回到 “Kotlin 还是 Java” 这个也许已经令 Android 开发者感到厌烦的问题上,定论显然并不存在,关键是选择最适合的方式。

内容取材整编转自:OSCHINA 社区
oschina.net/news/111189/migrating-from-java-to-kotlin
oschina.net/news/117389/google-home-benefits-from-using-kotlin

欢迎关注我的微信公众号「码农突围」,分享Python、Java、大数据、机器学习、人工智能等技术,关注码农技术提升•职场突围•思维跃迁,20万+码农成长充电第一站,陪有梦想的你一起成长

Google 再见 Java相关推荐

  1. Google 的 Java 编码规范,参考学习!

    这份文档是 Google Java 编程风格规范的完整定义.当且仅当一个 Java 源文件符合此文档中的规则, 我们才认为它符合 Google 的 Java 编程风格. 与其它的编程风格指南一样,这里 ...

  2. 关于Google Pay JAVA后端处理

    Google Pay JAVA后端处理 前言:最近接了个需求,关于谷歌支付的处理流程.觉得有必要记录下来,在网上也找了很多资料,不 全.怎么个不全法呢? *第一:很多人用的方法就是使用谷歌的publi ...

  3. 谈谈ali与Google的Java开发规范

    无规矩不成方圆,编码规范就如同协议,有了Http.TCP等各种协议,计算机之间才能有效地通信,同样的,有了一致的编码规范,程序员之间才能有效地合作.道理大家都懂,可现实中的我们,经常一边吐槽别人的代码 ...

  4. Google的Java开发规范

    长期以来,Google一直有针对各种语言的规范,例如C++, Python等等.惟独对于Java语言,Google一直没有给出相应的规范(传说中是因为Google Java首席构架师Joshua Bl ...

  5. 忘记番石榴:5个Google库Java开发人员应该知道的

    什么是最有用但未知的Google Java库? 如果我们在激烈的黑客马拉松中阻止某人并要求她命名一个受欢迎的Google Java库,那么答案可能就是Guava. 这也就不足为奇了,因为它的主要重点是 ...

  6. Google的Java常用类库 Guava

    Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库.这个库是为了方便编码,并减少编码错误.这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验 ...

  7. Google首席Java架构师访谈:选择编程语言就像选择酒吧

    文 / Peter Seibel 译 / 郝培强 本文是Commmon Lisp专家Peter Seibel对Google公司首席Java架构师Joshua Bloch的访谈,谈到程序员应该看什么书. ...

  8. Thumbnailator-图片处理的Google开源Java类库

    最近认识了一个图片处理的类库Thumbnailator,可以进行图片缩放,裁剪,打水印,调整图片比例等. 优势在于处理效果比Java API好,代码量少. <dependency>< ...

  9. Docker学习总结(36)——利用Google开源Java容器化工具Jib构建镜像

    一.前言 容器的出现让Java开发人员比以往任何时候都更接近"编写一次,到处运行"的工作流程,但要对Java应用程序进行容器化并非易事:你必须编写Dockerfile,以root身 ...

  10. 【历史上的今天】8 月 13 日:Oracle 起诉 Google,Java 版权案正式开启!

    透过「历史上的今天」,从过去看未来,从现在亦可以改变未来.历史中的 8 月 13 日,都有哪些互联网事件发生呢? 1973 年 8 月 13 日 ICCP(Institute for Certific ...

最新文章

  1. 在octopress中增加“返回顶部”按钮
  2. 超级计算机 红皇后,阿丽塔诺瓦不是最大反派 幕后大boss超级计算机黑化AI
  3. vi编辑器基本使用方法
  4. 超详细轮播图的三种实现方法html+css+javascript
  5. linux7安装EMC的多路径,Oracle Linux 7.8 多路径(Multipath)+Udev绑定磁盘
  6. 双路服务器只显示一半内存,双路服务器只显示一半内存
  7. Epic Games 携精彩作品强势登录 GMGC 2016
  8. mysql 安装部署
  9. 主流硬盘接口有哪些?
  10. ASP.NET程序中 抛出Thread was being aborted. 异常(转)
  11. 《精通 ASP.NET MVC 4》----1.5 ASP.NET MVC 4的新特性
  12. 【BZOJ2460】元素(线性基---(id,value)绑定,求id异或非0对应的最大value 和)
  13. python训练手势分类器_从Scikit Learn中保存的训练分类器进行预测
  14. 计算机组成原理 唐朔飞笔记,计算机组成原理笔记(唐朔飞版)
  15. python cox回归_TCGA+biomarker——多因素Cox回归
  16. 盘点MAC下用过的五笔输入法
  17. Python批量给PDF加图片签名
  18. 经历3个失败的游戏创业公司,我所亲历的痛与教训
  19. commons-math3-3.6.1-org.apache.commons.math3.analysis.function-包下的类(三)-中英对照文档及源码赏析
  20. 51nod1423 最大二“货”问题

热门文章

  1. Java计划任务:ScheduledThreadPoolExecutor
  2. 分布式存储中HDFS与Ceph两者的区别是什么,各有什么优势?
  3. 我是不是得工作恐惧症了
  4. 一文细数73个Vision transformer家族成员
  5. 一周3篇顶刊!颜宁团队今年已发5篇Science/PNAS等顶级论文
  6. 请实现一个函数,将一个字符串中的每个空格替换成...
  7. Unity中Invoke函数基础用法
  8. 2507-AOP- springboot中使用-使用注解方式
  9. C#基础精华05(正则表达式,)
  10. 详解 ASP.NET并行,异步,多线程