Android开发,Kotlin的了解与学习(二)-----Kotlin数据类型与Extensions的学习

在继续之前,首先我们祭出Kotlin 在android上的大杀器:

apply plugin: 'kotlin-android-extensions'
这个插件,将这句话添加到app的build.gradle上


这是一个Kotlin官方提供的一个可以帮助我们在代码区获取控件并处理的工具。

什么意思呢?

比如说我的xml中有一个控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">


    <TextView
        android:id="@+id/kt_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello kotlin"/>
</LinearLayout>

有一个textview控件,id名为kt_text

在以前,我们要使用这个控件,需要怎么做呢

TextView tvKt;
tvKt = (TextView)findViewById(R.id.kt_text);
tvKt.setText("");
......
对吧,很标准的使用方法,或者使用依赖注入,直接Bind之类之类的

那么在kotlin中,如果我们使用了这个插件,我们可以直接。

kt_text.setText("厉害了")
是的,直接就可以用了

package com.stanny.kotlintest

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

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        kt_text.text = "厉害了"
    }
}

我们可以直接打出kt_text,



可以得到如下的提示框,选中后,会自动import一个类

import kotlinx.android.synthetic.main.activity_main.*
然后你可以直接拿着这个kt_text进行各种操作了。

是不会想说什么鬼?

说实话,在我开始学习kotlin的是否,遇到这个,让我对kotlin一下子充满了强烈的好奇与期待。

接下来我们再来看一个例子

打印Toast,我们新建一个Button按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">


    <Button
        android:id="@+id/btn_kt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello kotlin"/>
</LinearLayout>


这次我们设置他的点击事件
同样,我们先写出之前的设置方法

Button btn;
btn = (Button)findViewById(R.id.btn_kt);
btn.setOnClickListener(new OnClickListener(){
    @overwrite
    public void onClick(View view){
        showToast("toast");
    }
});

public void showToast(String toastInfo){
    Toast.makeText(this, toastInfo, Toast.LENGTH_SHORT).show();
}
非常眼熟的代码吧。可是却是很多

来看看kotlin 的代码

btn_kt.setOnClickListener { showToast("可以说炒鸡厉害了") }
fun Context.showToast(toastInfo: String, duration: Int = Toast.LENGTH_SHORT) {
        Toast.makeText(this, toastInfo, duration).show()
    }
!!!!!!!!!!!!!

先不说下面的showToast这个方法,只看上面的设置点击事件的代码。

是不是简直不可思议?

六七行的代码,一行搞定。

接下来看下面的代码

showToast这个方法,前面有一个Context,是指,该方法可以使用在Context类型的方法中。

后面有两个参数 toastInfo 和duration

和java不同的是,kotlin的代码,参数名放在类型之前

比如说String toastInfo变成了toastInfo : String。

其二,

duration: Int = Toast.LENGTH_SHORT

这句代码,我们不管定义了duration这个int类型的变量,还给她赋值了

这是为什么呢?

另外,我们在调用这个方法的时候

showToast("可以说炒鸡厉害了")
也只传了一个参数进来,这又是为什么呢?

是的!默认!这个Toast.LENGTH_SHORT是一个默认参数。

不传就默认使用这个参数。

也就是说,其实我们也可以传,像这样

showToast("可以说炒鸡厉害了", Toast.LENGTH_LONG)
在以前的话,很明显我们得写两个方法名相同参数不同的方法才行。

这种又方便了我们方法的重载。

上面,只是大概的给大家一点甜头,感受了一下kotlin的方便,避免大家逃跑。。。

后面,我们来研究一下一些死板无聊的东西

一、数据类型

首先给大家盗一张图,这个是数值类型


我也找不到出处了,十分抱歉

可以看出,和原jiava的数据类型十分的相似,大的不同比如首字母都大写

变量的声明:

var <参数名> : <类型> = <默认值>

比如:

var pageNum : Int = 10
var pageName : String = "123"
var pageSize : Double = 1.20

常量的声明:

val <参数名> : <类型> = <默认值>

比如:

val name : String = "xb"
val age : Int = "23"
val sex : String = "男"

可以看出,相比于java的final static int 这里的常量声明简单了很多

当然,首先你得熟悉参数名居然在参数类型之前这一颠覆你世界观的设定

除此之外,声明还可以像下面这种

val name = "xb"
val age = 18

因为,我们的默认值已经确定了是数值还是字符串

所以就不需要再写数据类型,即age已经默认了是整数类型

另外,之前在java中一些风骚操作也不能使用了,比如

String size = 18 + "cm";
就不能写作

val size: String = 18 + "cm"
这样是会报错的,kotlin是强类型检测,不允许这种
另外,定义变量,还会用到一个符号

?问号

比如

var a : Int = 1
var b : Int? = 1
在上面这种情况下,两种方式是一样的

?表示该类型可以为null,即可以把?当做@nullable来使用

即可以给b赋值 b = null

如图所示,给a赋值为null,会直接报错

在这里我们也可以看出kotlin是空指针安全的,在原来java里,我们需要去手动添加判断

if(a ! null){
    ......
}
判断成功后才继续走下一步,使用了kotlin后,我们甚至在编写代码的是否就可以判断是否会出错了。

然后是数组类型 Array

    var array1 = arrayOf(1, 2, 3)
    var array2 = arrayOfNulls<Int>(5)
    var array3 = arrayListOf<String>()
上面就是三种最简单的Array类型

array1相当于java的带参数数组

int[] array1 = new int[]{1,2,3}
array2相当于java的不带参数数组

int array2 = new int[5]{}
array3相当于java的集合list

List<String> array3 = new ArrayList<>();
除了这种基础用法,我们还可以使用带函数的方式

比如

var array4 = Array(3, { i -> i + 5 })
解读:创建一个长度为3,每个参数的值+5的一个array

array4的值就是{5,6,7}
除了基本Array,array也有它的衍生类

ByteArray

IntArray

ShortArray

DoubleArray

LongArray

FloatArray

CharArray

BooleanArray

但是!就是没有StringArray,因为Array的基本款就是StringArray

var array5: IntArray = intArrayOf(1, 2, 3)
var array6: BooleanArray = booleanArrayOf(true, false, true)

多行字符串
字符串我们上面说过

var name = "xbb"
var name : String = "xbb"
这是单行字符串

kotlin中还可以使用多行字符串

var mLine = """
        I like Kotlin
        It's very Nice
        Hello World
        """
乍得一看,有人说啦,其实咧,这就是java的换行+号了

String a = "I like Kotlin"+
	" It's very Nice"+
	"Hello World";
Too Young Too Simple

这是两个完全不一样的东西

因为kotlin是支持这样的

 var m = "I like Kotlin"+
            "It's very Nice"+
            "Hello World"
那么这个三个引号包裹起来是什么意思呢

我们直接打印来看

    var m1 = """
        I like Kotlin
        It's very Nice
        Hello World
        """
    var m2 = "I like Kotlin" +
            "It's very Nice" +
            "Hello World"
	println(m1)
        println(m2)


对,多行字符串是带了换行功能的,他不仅仅是一个拼装的效果
下一章我们研究一for if 之类的方法


Android开发,Kotlin的了解与学习(三)-----流程控制语句








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值