Kotlin来了
kotlin优点(主要是代码简洁度)
1.避免空指针异常,其次在一个文件中java方法必须写在class里面,而kotlin则没要求
2.在同一个文件中,有class a则不允许在class外的方法(与class同一级别,也就是没写在class里的方法)同名
3.可以没有;作为语句结尾
http://www.jianshu.com/p/1a23856bc749
基础语法
相等
引用相等
a === b // a.identityEqual(b)结构相等
a == b // a?.equals(b) ?: b === nullFor
in等价于foreachfor ((k, v) in map) {
println("$k -> $v")
}indices下标索引fun main(args : Array<String>) {
for(i in args.indices) {
print(args[i])
}
}sizei()fun main(args : Array<String>) {
var i = 0
while(i < args.size()) {
print(args[i++])
}
}
var代表变量;val代表常量
参数后面带有?代表可为空
创建对象直接 val user = User()就好
重写方法在fun前面override关键字java则是在上面有一个注解的@override
声明一个为空的对象作为变量
private var mTextMessage: TextView? = null
把一个对象转为子对象使用关键字 as
mTextMessage = findViewById(R.id.message) as TextView
万能的:
方法返回一个值,在方法的()后面加:以及返回的类型
例如返回布尔类型的
fun a():Boolean{
return false
}
在类后面:xxx()这是继承或者实现一个另一个类
例如:class MainActivity : AppCompatActivity() {} 可以被继承的类需要在类前面使用open关键字,
被overite 的方法也需要在方法前使用open
OOP
- 默认都是
final类 package import和java一致,如果出现导入报名冲突可以使用
asimport foo.Bar
import bar.Bar as bBar
构造函数
主构造函数只有一个,是类头的一部分跟在类名后面
主构造函数的参数
class Person (firstName: String) {
init {} // 主构造函数初始化代码
} // 等价于
public final class Person {
public Person(String name) {
// init{}
}
}主构造函数 + 属性
class Person(val name: String, var age: Int) {} // 等价于
public final class Person {
private final String name;
private int age; public Person(@NotNull String name, int age) {} // getter setter
}如果一个类没有声明任何构造函数,将会生成一个不带参数的主构造函数
二级构造函数,使用constructor
class Person(val name: String) {
constructor(name: String, parent: Person): this(name) {}
}创建实例:没有<del>
new</del>关键字,直接调用构造函数val person = Pserson("ss");
属性
要使用属性只需要使用名称引用即可,就相当于java中的public字段
继承:
所有类的共同父类Any,不属于java.lang.Object,没有任何成员变量,甚至没有equals()、hashCode()、toString()
普通类
继承的类有主构造函数
open class Base(p: Int) {} class Derived(p: Int) : Base(p) {}没有主构造函数,那么每个二级构造函数使用
super或者委托给另一个构造函数class MyView : View { constructor(context: Context) : super(context) {
} constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
}
}父类的函数必标注
open(去掉java中的final关键字)否则子类不允许定义同名函数;因此父类类头上也要标注open- 函数必须加上
override标注才能重写父类方法
抽象类 & 接口
单例
好像object 声明修饰的就是一个简单的单例模式
object SDKFactory {
fun say(name : String) {
println("hello ${name}")
}
}
SDKFactory.say("CatDog") // SDKFactory.INSTANCE.say("CatDog")
public final class SDKFactory {
public static final SDKFactory INSTANCE;
private SDKFactory() {
INSTANCE = (SDKFactory)this;
}
static {
new SDKFactory();
}
public final void say(@NotNull String name) {
// ..
}
}
Kotlin来了的更多相关文章
- Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...
- 用Kotlin实现Android定制视图(KAD 06)
作者:Antonio Leiva 时间:Dec 27, 2016 原文链接:https://antonioleiva.com/custom-views-android-kotlin/ 在我们阅读有关c ...
- Kotlin与Android SDK 集成(KAD 05)
作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...
- Kotlin的android扩展:对findViewById说再见(KAD 04)
作者:Antonio Leiva 时间:Dec 12, 2016 原文链接:http://antonioleiva.com/kotlin-android-extensions/ 你也许已厌倦日复一日使 ...
- Kotlin类:功能更强、而更简洁(KAD 03)
作者:Antonio Leiva 时间:Dec 7, 2016 原文链接:http://antonioleiva.com/classes-kotlin/ Kotlin类尽可能简单,这样用较少的代码完成 ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
- 用Kotlin创建第一个Android项目(KAD 01)
原文标题:Create your first Android project using Kotlin (KAD 01) 作者:Antonio Leiva 时间:Nov 21, 2016 原文链接:h ...
- Android的Kotlin秘方(II):RecyclerView 和 DiffUtil
作者:Antonio Leiva 时间:Sep 12, 2016 原文链接:http://antonioleiva.com/recyclerview-diffutil-kotlin/ 如你所知,在[支 ...
- Android的Kotlin秘方(I):OnGlobalLayoutListener
春节后,又重新“开张”.各位高手请继续支持.谢谢! 原文标题:Kotlin recipes for Android (I): OnGlobalLayoutListener 原文链接:http://an ...
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2. 基本概念 2.1. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
随机推荐
- JAVA中使用AES加密解密
技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info(&qu ...
- USACO Section1.3 Wormholes 解题报告
wormhole解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------- ...
- c语言字符串内存分配小记
一.疑问 有这样一道题: #include "stdio.h" int main() { ]; ]; scanf("%s", word1); scanf(&qu ...
- Python面试题(练习三)
1.MySQL索引种类 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 2.索引在什么情况下遵循最左前缀的规则? 最左前缀原理的一部分,索引index1:(a,b,c),只会走a ...
- python练习题及实现--文件处理、date日期
练习题作者:Vamei 出处:http://www.cnblogs.com/vamei http://www.cnblogs.com/vamei/archive/2012/07/19/2600135. ...
- 哲学家就餐-同步问题解析-python
五个哲学家吃五盘通心粉,由于通心粉很滑,所以必须要拿起左右两边的叉子才能吃到. 叉子的摆放如图所示. 那么问题来了:能为每一个哲学家写一段描述其行为的程序,保证不会出现死锁. 解法1:让他等待能够使用 ...
- hnust 神奇的序列
问题 E: 神奇的序列 时间限制: 1 Sec 内存限制: 128 MB提交: 635 解决: 84[提交][状态][讨论版] 题目描述 Aurora在南宁发现了一个神奇的序列,即对 ...
- leetcode 211. 添加与搜索单词 - 数据结构设计 解题报告
设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a- ...
- Scala 基础(1)—— 定义变量 & 定义函数
1. 使用 val & var 定义变量 Scala 中的变量被分为2种:val 和 var.其含义于 Java 中的 final 关键字类似. val 等同于被 final 修饰过的变量, ...
- 【bzoj1007】[HNOI2008]水平可见直线 半平面交/单调栈
题目描述 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=- ...