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. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
随机推荐
- CONDENSE命令により、文字列から冗長スペースが削除
CONDENSE 命令により.文字列から冗長スペースが削除されます. CONDENSE c [NO-GAPS]. この命令により.項目 c に先行空白が含まれる場合は削除され.その他の空白列がある場合 ...
- 6.bootstrap 将文本内容关联一个动作(手机端导航适配)&在超小尺寸下显示,屏幕变大后消失
1.情景:这是出现在手机端导航适配的,点击文本MENU可以出现下拉的list 解决方法: 1.首先要想到,MENU只有两个状态,因此可以用checkbox实现 2.将MENU放在label标签里面,l ...
- Java学习关于时间操作的应用类--Date类、Calendar类及其子类
Date类 Date类封装了当期时间和日期.与Java1.0定义的原始版的Date类相比,Date类发生了本质的变化.在Java1.1发布时,原始版Date类定义的许多功能被移进Calendar类和D ...
- Maven学习 (三) 使用m2eclipse创建web项目
1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 3.下一步默认配置,使用默认的工作空间,或者你可以自己选择其他的空间 ...
- CSS 一些基础知识(优先级、行内元素的一些属性、font-size单位) 怎样不加载图片
CSS大小写不敏感 选择器优先级如下所示: 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. 作为style属性写在元素内的样式 id选择器 类选择器 标签选择器 通配符选择 ...
- 《1024伐木累》-小白篇之丽jie(结束篇)-总章节六
往期回顾: 机缘巧合,月侠发现了老王和他心仪女孩儿的秘密,这让他倍感愤怒,一年以后,丽姐又在去往老王家的路上,这让月侠感到历史即将重新上演,他想拦住丽姐,可恰巧丽姐手机没电,失去了联系. 小序 有人 ...
- 成员变量和属性区别(@property那点事儿)
历史由来: 接触iOS的人都知道,@property声明的属性默认会生成一个_类型的成员变量,同时也会生成setter/getter方法. 但这只是在iOS5之后,苹果推出的一个新机制.看老代码时,经 ...
- typeAliasesPackage 配置
mybatis 的 xml 文件中需要写类的全限定名,较繁琐,可以配置自动扫描包路径给类配置别名,有两种配置方式. 方式一: mybatis-config.xml 中配置 <typeAliase ...
- Python列表深浅复制详解
转自:https://www.cnblogs.com/blaomao/p/7239203.html 在文章<Python 数据类型>里边介绍了列表的用法,其中列表有个 copy() 方法, ...
- Python学习-KindEditor-富文本编辑框
1.进入官网 2.下载 官网下载:http://kindeditor.net/down.php 本地下载:http://files.cnblogs.com/files/wupeiqi/kindedit ...