Android开发,Kotlin的了解与学习(二)-----Kotlin数据类型与Extensions的学习
来源:互联网 发布:高维数据分析 编辑:程序博客网 时间:2024/05/16 16:17
在继续之前,首先我们祭出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.kotlintestimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport 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 = 10var 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 = 1var 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的了解与学习(三)-----流程控制语句
- Android开发,Kotlin的了解与学习(二)-----Kotlin数据类型与Extensions的学习
- Android开发,Kotlin的了解与学习(八)-----kotlin与java的互相调用
- Android开发,Kotlin的了解与学习(一)-----下载与安装
- Android开发,Kotlin的了解与学习(六)-----类与继承
- Android开发,Kotlin的了解与学习(七)-----接口与实现
- Android开发,Kotlin的了解与学习(九)-----在Android上的具体应用
- Android开发,Kotlin的了解与学习(三)-----流程控制语句
- Android开发,Kotlin的了解与学习(四)-----基本语法之方法、操作符
- Android开发,Kotlin的了解与学习(五)-----基本语法之集合相关
- Kotlin学习之kotlin-android-extensions
- Kotlin学习笔记(二):Kotlin与Java对比
- Kotlin开发语言学习(3)Kotlin与Java混编
- Kotlin学习(学习kotlin的日子)
- kotlin学习笔记——Kotlin Android Extensions
- Android中kotlin的学习(anko + kotlin)
- Kotlin学习笔记(二)基本数据类型
- Kotlin学习笔记二(数据类型)
- #kotlin学习笔记#kotlin的安装与第一行Kotlin代码
- 命令替换的两种方式$()和``
- 开源资讯- Jeecg 在线聊天MQ插件发布
- mysql的5中查询子句之二group by分组查询
- C语言之俄罗斯方块游戏实现
- win7+Ubuntu双系统修改启动项顺序
- Android开发,Kotlin的了解与学习(二)-----Kotlin数据类型与Extensions的学习
- JQuery操作简单html组件
- oracle查询问题
- Linux-线程(一)创建 终止 等待线程
- 第四章 SpringMVC--Controller接口控制器详解(5)
- UnityShader案例(五)——法线纹理
- [Leetcode] 206. Reverse Linked List 解题报告
- 多线程系列之创建线程
- 用nginx最代理请求总是 required is not finished yet