第一章 Kotlin入门及环境配置

来源:互联网 发布:闪电邮 mac 编辑:程序博客网 时间:2024/06/07 07:34

Kotlin

虽然java8已经发布很久了,作为一个重大改变的版本,它包含很多我们期待的像现代语言那样的改善,由于设备、android系统版本等问题,目前android仅支持部分java8中的语法,android开发者还是被迫在使用java7,估计等来这天也不是很快。

android应用是基于java开发的,java依赖于JVM,所以我们可以使用任何语言开发android应用,只要它能够编译成JVM能够识别的字节码就ok了。

在今年的谷歌IO大会上,Kotlin被正式确定为官方支持开发语言,Kotlin的魅力可见一斑。Kotlin 是一个基于 JVM 的新的编程语言由 JetBrains开发。Intellij作为它主要的开发IDE,由于Android Studio是基于Intellij的,所以可以集成开发环境,进行开发(目前Android Studio3.0已默认集成好了)。

相比java7,Kotlin优势很明显:

  • 更加易表现:这是最重要的优点之一,可以编写更少的代码
  • 更加安全:Kotlin是空安全的,也就是说我们在编译时期就处理了各种null的情况,避免执行时异常。
  • 支持函数式编程:Kotlin是基于面向对象的语言。使用了很多函数式编程的概念,如,lambda表达式,Collections的处理方式。
  • 可以扩展函数:可以扩展类的更多特性,甚至我们没有权限访问这个类中的代码。
  • 高度互操作性:Kotlin与所有基于java的框架完全兼容,可以让你保持熟悉的技术栈,同时获得更现代化语言的优势。

下面是Kotlin与java一些对比,让我们更加熟悉下Kotlin的特性:
1. 易表现
我们来看一个实体类:

public class Person {    private String name;    private String sex;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "Person{" +                "name='" + name + "'" +                ",set='" + sex + "'" +                ",age='" + age + "'" +                "}";    }}

而Kotlin,更简单:

data class Person(        var name:String,        var sex:String,        var age:Int)

这个实体类,它会自动生成所有属性和对象的访问器,以及一些有用的方法,如:toString()

2. 空安全
我们在平时开发中,不可避免的都会时不时遇到NullPointerException,其解决方式就是,不停的判断它是否为null。Kotlin,可以通过一个安全调用操作符(?)来明确地指定一个对象是否能为空。

//这里不能通过编译,Artist不能是nullvar artist:Artist = null;//Artist可以是nullvar artist:Artist? = null//无法编译,artist可能是null,我们需要进行处理artist.print()//只要在artist!=null时才会打印artist?.print()//智能转换if(artist != null){    artist.print()}//Elvis操作符, ?: 左边的返回值不为空则返回,否则返回 ?: 右边的值var name = artist?.name ?: "enpty"// !!操作符,抛出一个非空的值 或者空npe(nullPointException)var name = artist!!.name

3. 扩展方法
我们可以给任何类添加函数。它比我们项目中典型的工具类更加有可读性。如:给Fragment增加一个显示toast的函数:

fun Fragment.toast(message:CharSequence, duration:Int = Toast.LENGTH_SHORT){    Toast.makeText(getActivity(),message,duration).show()}

现在我们可以使用了:

fragment.toast("Hello World")

4. Lambda-函数式支持
在开发中,我们经常为一个按钮设置监听,使用匿名内部类实现其具体逻辑,现在我们不比再这么麻烦了,由于lambda的支持,我们这么写:

btn.setOnClickListener {     toast("Hello World") }

是不是很简便,这只是Kotlin的一小部分,后面还有更多有趣的特性。

Kotlin-hello world

下面来集成kotlin环境,以helloworld来开始:
方式一:
在android studio3.0中,创建项目时勾选:Include Kotlin support选项即可。
helloworld

方式二:

在2.x版本的android studio版本中,首先需要安装Kotlin插件,进入Preferences中找到plugin栏然后搜索安装Kotlin插件。

然后新建一个工程,配置Gradle

1. Project Gradle中:
“`
buildscript {
ext.kotlin_version = ‘1.1.3-2’
repositories {
jcenter()
}
dependencies {
classpath ‘com.android.tools.build:gradle:2.3.3’
classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version”
}
}

allprojects {
repositories {
jcenter()
}
}
“`
上面的配置中,添加Kotlin插件的dependency,同时用kotlin_version指定插件的版本号,当我们用到Anko等库时也可以使用类似的用法,这样可以方便的统一修改版本号。

2. 在Module Gradle中:

apply plugin: 'com.android.application'apply plugin: 'kotlin-android'apply plugin: 'kotlin-android-extensions'android {    compileSdkVersion 26    buildToolsVersion "26.0.0"    defaultConfig {        applicationId "com.mr.myapplication"        minSdkVersion 15        targetSdkVersion 26        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    //添加kotlin标准库    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"    compile 'com.android.support:appcompat-v7:26.+'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    testCompile 'junit:junit:4.12'}

接下来把MainActivity转换为kotlin代码:
打开MainActivity选择菜单栏code–>convert java file to kotlin file

class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)    }}

配置时还可以有更简单的方法,选择菜单栏Tools–>Kotlin–>Configure Kotlin in Project,可以帮我们一键配置kotlin环境,然后把MainActivity转换为Kotlin代码的就OK了

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 娇兰玉婷兰花系列 奋发人生 爷爷奶奶的奋斗力史 爷爷趴在玉婷的身上 朋友的妻子字幕中文翻译 露脸怀孕嫂嫂在线播放 中文字幕侵犯妻子在线疯人院 硬上嫂嫂在线 在线播放 怀孕 中文字幕女老师在线播放 丈夫经常晚归妻子不满离婚 农村孕妇对白 年轻母亲9完整高清免费观看 国产孕妇碰碰碰 厨房侵犯中文字幕 我邻居的妻子中文字幕在线 怀孕全部过程视频播放 水电工在厨房和妻子的视频 妻子出轨水电工在线播放 老公把婆婆干怀孕 在丈夫面前被侵 中文字幕全集 部长的妻子味道中文字幕 中文字幕被水电工掠夺的妻子 妻子在厨房跟水电工 互动 妻子与水电工在线 丈夫出差妻子与水电工 樱萌子被水电工侵犯中文字幕 在丈夫的面前侵犯入侵中文字幕 好妻子在线中文字幕 前田香织侵犯中文字幕 佐佐木明希上司中文字幕迅雷 医生d淫孕妇 公公一晚上要8次 公公现在就想要白关婷中文字幕 丈夫上司侵犯系列在线 义父犯美媳嫁樱花叶菜在线播放 儿子的妻子在线中文字幕云播 老公去世公公每天晚上抱着我睡 被水电工掠夺的妻子在线播放b 佐佐木明希大嫂中文字幕全集 善良的小妻子字幕 公公在我洗碗时在厨房要了我