京东APP收银台Kotlin化实践,大牛手把手教你

  • 数据容器(数组&集合)

  • 方法定义与调用

  • 访问权限

面向对象的特性,比如:

  • 类和类层次结构

  • 对象和类型

  • 封装、继承、多态、抽象

  • 接口&抽象方法

  • 混合mixin

  • 并发

  • 异常处理

  • 垃圾回收

  • 递归

函数式的特性,比如:

  • 引用透明

  • 高阶函数

  • lambda表达式

  • 模式匹配

  • Monad结构

  • 柯里化

  • 不变性&可变性

  • 闭包

Koltin和Java在语言特性上的差异

Kotlin独有的特性有:data类,sealed类,解构,中缀表达,访问范围,操作符重载,主从构造器,内部类/嵌套类,属性访问器(内置setter和getter方法),属性延迟初始化,类型继承体系。如下:

  • 增加类型继承体系

  • 增加默认参数、可变参数

  • 强化了不可变性

  • 强化了空安全

  • 强化了泛型

  • 强化了函数/lambda表达

  • 去掉了可受检异常

  • 增加了运算符重载

  • 修改了权限访问范围

  • 把最佳实践融入到语法

可以看到Kotlin和Java特性差异还是挺多的,这里举两个方面说一说:函数式和类型。

函数式

Kotlin较Java一个很大的特性差异便是对函数式的支持大大提高了。我们知道函数式基本元素有:

  • 不可变性

  • 引用透明

  • 无副作用

  • 高阶函数与lambda表达式

  • Monad结构

  • 柯里化

  • 模式匹配

  • 智能类型推断

  • 递归

  • 并发安全

函数式编程有如下等式:

图片

程序 = 可变性程序 + 不可变性程序

可变性程序 = 对象 + 依赖关系

不可变程序 = 纯函数 + 组合 (Monad结构)

Kotlin的语言特性对此都做了支持,相比于Java在组件化和响应式上Kotlin更加简洁、直观。

类型差异

Kotlin和Java类型上的差异,有类型声明差异和类型体系差异。

类型声明差异

val a: String = “I am Kotlin”

这与函数定义时返回类型,类继承,接口实现提供了一致的书写体验

fun sum(x: Int, y: Int): Int {

Java是类型前置的写法,定义方法时返回类型写在了前面,但是继承和实现是后置的。类型后置的好处:通过类型推导实现类型省略时一致的书写体验;Kotlin做到了三种场景符号一致,书写一致(类型推导)

类型体系差异

下图是Kotlin类型体系,Kotlin把基本数据类型统一成对象类型,形成了面向对象的继承体系。

*

Kotlin的瑕疵

kotlin的语言特性丰富而有力,带来了与Java的特性差异。任何事物都有正、反两面,kotlin也不例外。

1)多维数组需要通过嵌套的方式创建

val bytes = Array(3) { ByteArray(4) }

对比一下Java

byte[][] bytes = new byte[3][4];

相比Kotlin的,Java清晰简便多了

2)Kotlin没法实现的接口样子

这样的Java接口

interface Itest{

在Kotlin里实现该接口,class A会因为实现了两个相同签名方法而报错

class A : Itest{

3)抛弃了受检异常(checked exception)

这是颇有争议的瑕疵,有坏处也有好处。

**坏处:**对异常不强制要求处理。有时候调用一些方法,特别涉及到硬件或者网络相关的方法,往往不一定知道它可能会抛出什么异常,或者根本不知道它会抛出异常。便会在这块地方遗漏了某些异常的处理或者没做异常处理,埋下一些潜在的问题。

**好处:**Kotlin不区分checked exception,这样能简化代码书写,符合Kotlin一贯的简洁设计理念。因此Kotlin是没有受检异常的。

Kotlin在收银台具体实践

Kotlin语言所拥有的特性为面向过程特性、面向对象特性和函数式特性的部分总和。从V9.2.2版本开始,安卓收银台模块开始全面使用Kotlin语言。为了稳定,我们采用了Java和Kotlin混合开发的模式。

01与Java的互操作

先来看看Kotlin和Java的互操作。

1)Kotlin调用Java的代码

几乎和Java调用Java代码相同,有几个不相同的点如下:

1.属性前缀

示意代码:

public final class User {

2.平台类型

kotlin调用Java代码后返回的类型在Kotlin侧叫做平台类型。平台类型既可当作可空类型也可作为非空类型。换句话说,kotlin编译时,平台类型被认为是非空类型,不需要非空判断顺利编译通过,在运行时被认为是可空类型。平台类型可能触发空指针异常。收银台空安全实践避免了这种空指针,详见后文内容。

2)Java调用Kotlin的代码

在kotlin代码上增加Kotlin注解,Java调用Kotlin便能像Java调用Java代码般

1)@JvmOverloads 默认参数重载

@JvmOverloads

引入默认参数重载的注解后,只需要一次方法定义就够满足收银台对底部支付文案的内容更新,减少了方法定义的模版代码。

2)@JvmStatic 静态

object Updater {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

学习福利

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

详细整理在GitHub点击可见;

Android架构视频+BAT面试专题PDF+学习笔记

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-IGQJPbXl-1710683525827)]

详细整理在GitHub点击可见;

Android架构视频+BAT面试专题PDF+学习笔记

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值