初试Kotlin-使用Kotlin运行Android的第一个项目

     Java 和 C++ 之后,Google 在 I/O 2017 上宣布 Android 加入了对 Kotlin 编程语言的支持。Kotlin 由 Java 集成开发环境 IntelliJ IDEA 的开发商 JetBrains 开发,2012 年开源,采用 Apache 2.0 许可证,它是一个运行在 Java 虚拟机上的静态类型编程语言。Kotlin 虽然与 Java 的语法不兼容,但设计成可以与 Java 代码互操作,可复用现有的 Java 类库。Google 的 Android 团队称赞 Kotlin 拥有出色的设计,是一种成熟的语言,能让 Android 应用的开发更快更有趣。Android Studio 3.0 已经整合了对 Kotlin 的支持,不再需要额外安装插件。JetBrains 表示,他们会继续支持其它平台。如果你还记得的话,去年曾有报道称 Google Android 考虑采用苹果的 Swift 语言,而 Swift 就被称为是苹果的 Kotlin。

1、Kotlin介绍

 [Kotlin](https://kotlinlang.org/)
 Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者。Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并没有像预期那样及时跟进。

  Java缺失的很多特性在最新的修订版中逐渐覆盖到了,但Android开发者暂时还没能够使用它们。这就使得类似Kotlin这样的语言有了用武之地了:在旧的开发环境中使用现代语言的特性。

  Kotlin是什么?

  Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而Android Studio是基于IntelliJ修改而来的。Kotlin是一门包含很多函数式编程思想的面向对象编程语言。

  Kotlin生来就是为了弥补Java缺失的现代语言的特性,并极大的简化了代码,使得开发者可以编写尽量少的样板代码。

2、配置工程

新建一个Project “MyKotlin” 
在项目的build.gradle上添加kotlin版本号

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.1.2"
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

在module中的build.gradle添加kotlin的依赖,添加对android的支持和添加java的编译路径,在main下创建kotlin目录 并在gradle文件写上后的完整的build.gradle如下:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

buildscript {
    repositories {
        jcenter()
    }
}

android {
    compileSdkVersion 24
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.xuboyu.mykotlin"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //记录在main下创建kotlin目录
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

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'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    //compile kotlin
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}


点击Sync Now重新加载一下项目


3、代码转换

可以选择MainActivity 然后选择code–>>Convert  Java  File to Kotlin File … 
然后将生成的文件kt 剪切到kotlin目录下。 


注意:

如果按照上面的步骤执行后没有在code中仍然没有Convert Java File to Kotlin File … 这个选项的话,就按照下面的步骤走

  • 使用Android Studio下载Kotlin相关插件

执行 Settings -> plugins -> BrowseRepositories中搜索“Kotlin”



Kotlin在语法上整体比起原先的java要比较简洁,简单,语法简单不罗嗦,使用var表示变量,使用val表示常量,连方法(function)都缩写成fun,而类的继承和实现则更加简单,使用:即可,而且每个句子都不用加分号(;)。在控件的初始化在之前的常规写法中,在定义了一个控件之后,必须使用FindViewById来获取到该layout中的控件,然后才可以进行setonclicklistener进行监听等等的操作,对比一下两者在调用一个TextView的setText的过程就可以看出来Kotlin在使用时可以减少一定的代码量。

一个如下的textview:

<TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

按照之前的写法如下:

package com.example.xuboyu.mykotlin;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.text);

        textView.setText("XuBoYu");
    }
}
使用Kotlin的写法如下:

package com.example.xuboyu.mykotlin

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

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

        text.setText("XuBoYu")
        text.setTextSize(20.0f)
    }
}

运行结果如下:


另外一个值得注意的地方是Kotlin对于原本java中的空指针即NullPointerException或者NPE自带了空指针安全保护,原本我们在java中需要写防御性的代码来判断对象是不是null的情况,Kotlin中空指针异常得到了很好的解决。在类型上的处理,即在类型后面加上?,即表示这个变量或者参数以及返回值可以为null,否则不允许这个变量参数为null或者返回null!也就是说,对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上?,否则编译无法通过!(Kotlin不允许声明变量但不初始化)

    //赋非空值
    var str1 :String = "xuboyu"
    //设为null
    var str2 :String? = null
    //强制设为null
    var str3 :String = null!!

对于其他更多的有关Kotlin本人也刚刚接触学习,这算是记录一下这次学习,IT世界的新老更替永远比我们学习的速度要快,学无止境!

更多具体的信息可以在Kotlin的网址上详细查阅: http://kotlinlang.org/docs/tutorials/android-plugin.html

  • Kotlin相关网址

Kotlin官网 
http://kotlinlang.org

l Kotlin-github地址 
https://github.com/JetBrains/kotlin


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值