Java 是一门 强类型、静态检查、显式类型 的“低糖”语言,它支持面向对象编程、面向对象多态、并发编程、事件驱动、反射元编程、泛型编程、Annotation 处理,当然,也包含基本的函数式编程和递归支持
Kotlin 是一个从来不缺特性的语言 — 协程、类型推导、完全面向对象(class
, object
, companion object
)、扩展函数、typealias
、面向对象 mix-in混入、first-class 面向对象代理、属性(property)、密封类(sealed class
)、数据类(data class
)和数据类解构赋值、注解类(annotation class
)、internal
访问限制、lateinit var
实例字段属性、闭包(lambda)、高阶函数、尾递归tailrec
、灵活控制流(labled chunk)、if
表达式、when
分支判断、内联(inline)方法和类、vararg
、操作符重载、和 Object#equals
等价的 (==
) 二元逻辑运算符、infix
notation (e.g. to
, until
)、elvis (?:
) 和 null 传导 (?.
)、区间和 Pair
、多行字符串、强制标识符合法化(val
#_# = 0x0_0
)、软化关键字(soft keywords)、in out
和声明处型变、reified
内联实现真泛型
Java 的泛型
- Java 的类型、子类型和型变
- Java 类型相关名词解释
- Subtyping, Type Compatibility, First-class-citizen, Polymorphism
- Raw Type, Generic Type, Generic Method (Parameterized Types)
- Type Constructor, Type Parameter (PLT)
- Type Ereasure (in Java)
- Type Wildcard (
capture<…>
in Java)
- Java 的泛型通配符Type wildcard、生产者
<? extends T>
和消费者<? super T>
模式使用 - 子类型、泛型类型型变、类型参数的子类型约束、类型安全
- Java 编译器javac怎么知道infer我指定的子类型subtyping限定constraint安不安全well behaved?
- Kotlin 的泛型型变标记:生产者
out
和消费者in
、声明处型变 - Kotlin 的类型投影、
*
类型参数 - Java 的泛型参数推导
invokedynamic 和 Lambda、Runtime Desugar 有啥关系
(Android)
- Java 8 的
->
lambda:匿名anonymouse子类subclass的语法糖、Kotlin 的 SAM interface 自动实现 - Effective
final
局部变量问题、Ruby、Python、C# 里的等价物 - Java 是怎么实现 Lambda 的、为什么要这么做、为什么需要
invokedynamic
支持