Kotlin的一些基础使用以及在android studio使用与java的不同
来源:互联网 发布:网络大电影怎么发行 编辑:程序博客网 时间:2024/06/03 18:07
var表示标量
val 表示常量
var a:type? type?代表a可空标识
Java在结尾时用;结尾而kotlin什么都不用,结尾不用写任何东西
Array<String>表示String[]
var name:type=1; 表示类型为type的变量name
var name=1;自动推导类型
var name:type;在没有赋初始值时必须声明类型
$后可以跟一个变量名称
b!!操作符(b!!会返回一个非空的b或者抛出一个b为空的NPE(NullPointException空指针异常))
val l=b!!.length()
val i=10;
val s=”i=$i” 识别为i=10
Val s=”abc”
Var str=”$s.length is ${s.length}” //识别为abc.length=3
fun a(obj:Any):c{
if(obj is String){}
}
If流程控制
val max=if(a>b) a else b
if分支可以表示块,最后一个表达是该块的值
val max=if(a>b){
print(“dsaasdasdsa”)
a
}
Else{
print(“sdsdsdsds”)
b
}
when 表达式取代了switch
When(x){
0,1 -> print(“sdsdfdfsdfdsf”);//x为0,1中的一个执行此步
2 -> print(“sdsdfdfsdfdsf”);//x为2执行此步
else -> print(“sdsdfdfsdfdsf”);//其他执行此步
}
使用Java类
val intent = Intent(this, MainActivity::class.java)
类名::class.java没有为什么就这么写记着就是没有new直接调用构造方法
代表函数a,fun为一个函数的声明,c为函数返回值类型,如果c为Unit则代表返回为空,可以省略不写,obj为任意(Any)类型
可以用is检查obj的类型
for(int i=0;i<mFirstFragments.size();i++
){
mFirstFragments.get(position).setPosition(position);
}
==for (i inmFirstFragments!!.indices)
{
mFirstFragments!![position].setPosition(position)
}
mTabLayout= (TabLayout) findViewById(R.id.tab_title);
==mTabLayout = findViewById(R.id.tab_title)asTabLayout类型转换的不同
switch (position){
case 0://要闻http://inews.ifeng.com/50977577/news.shtml
url=url.append("http://inews.ifeng.com/").append(num).append("/news.shtml");
break;
case 1://财经
url=url.append("http://ifinance.ifeng.com/").append(num).append("/news.shtml");
break;
case 2://体育
url=url.append("http://isports.ifeng.com/").append(num).append("/news.shtml");
break;
case 3://军事
url=url.append("http://imil.ifeng.com/").append(num).append("/news.shtml");
break;
case 4://科技
url=url.append("http://itech.ifeng.com/").append(num).append("/news.shtml");
break;
case 5://历史
url=url.append("http://ihistory.ifeng.com/").append(num).append("/news.shtml");
break;
case 6://娱乐http://ifenghuanghao.ifeng.com/13263804/news.shtml
url=url.append("http://ifenghuanghao.ifeng.com/").append(num).append("/news.shtml");
break;
}
而在kotlin中
when (position) {
0//要闻http://inews.ifeng.com/50977577/news.shtml
-> url = url.append("http://inews.ifeng.com/").append(num).append("/news.shtml")
1//财经
-> url = url.append("http://ifinance.ifeng.com/").append(num).append("/news.shtml")
2//体育
-> url = url.append("http://isports.ifeng.com/").append(num).append("/news.shtml")
3//军事
-> url = url.append("http://imil.ifeng.com/").append(num).append("/news.shtml")
4//科技
-> url = url.append("http://itech.ifeng.com/").append(num).append("/news.shtml")
5//历史
-> url = url.append("http://ihistory.ifeng.com/").append(num).append("/news.shtml")
6//娱乐http://ifenghuanghao.ifeng.com/13263804/news.shtml
-> url = url.append("http://ifenghuanghao.ifeng.com/").append(num).append("/news.shtml")
}
内部类的表示
class webViewClient extends WebViewClient {}
nternal inner class webViewClient : WebViewClient() {}
内部类和参数默认为public
类默认为不可继承(final),想要可被继承要声明为open或abstract
取消了static关键字,静态方法和参数统一写在companion object块
internal模块内可见,inner内部类
空判断
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式一种像Java一样抛出空异常,字段后加!!,另一种不做处理直接跳过,字段后加?
//类型后面加?表示可为空var age: String? ="23" //抛出空指针异常val ageInt = age!!.toInt()//不做处理跳过val ages = age?.toInt()
关键字(尽量补全)
by as lazy init downTo
声明:open override fun inline inner internal data companion object lateinit var val
判断:when in is
运算:and or
类型
Any Unit
基本类型:Boolean Byte Short Int Long Float Double Char
val list = ArrayList<String>()//递增for (int i = 0; i < list.size(); i++)for (i in list.indices) {
print(list[i])
}//递增for (int i = 2; i < list.size(); i++)for (i in2..list.size-1) {
print(list[i])
}//递减for (int i = list.size(); i >= 0; i--)for (i in list.size downTo 0) {
print(list[i])
}//操作列表内的对象for (item in list) {
print(item)
}//加强版for((i, item) in list.witnIndex()) {
print(list[i])
print(item)
}//变种版
list.forEach {
print(it)
}
list.forEach {
print(it)
}
list.forEachIndexed { i, s ->
print(list[i])
print(s)
}
list.forEachIndexed(object :(Int,String) -> Unit{
override funinvoke(i: Int, s: String){
print(list[i])
print(s)
}
})
val x =7
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in10..20 -> print("x is outside the range")
else -> print("none of the above")
}
在Kotlin中常量用val声明,变了用var声明,关键字在前面,类型以冒号:隔开在后面,也可以省略直接赋值,类型后带问号?表示可为空类型(默认空安全)。
常量val延迟加载by lazy{},默认线程安全关闭线程安全lazy(LazyThreadSafetyMode.NONE){},变量var延迟加载lateinit。
//常量数组int[][][] arrs = new int[3][2][1];
val arrs = Array(3) { Array(2) { IntArray(1) } }//空安全变量
var str: String ="hello"//可为空字符串变量
var str1: String? =null
Android项目中使用Kotlin
1. 安装Kotlit插件
Android Studio 默认没有装Kotlin插件File/Setting/Plugins/Install JetBrains plugin搜索Kotlin点击Install安装,Kotlin Extensions For Android已经过时废弃了。接下来只需要简单的配置就可在项目中使用Kotlin和Java同时开发了。
2. 使用Kotlin
项目gradle加入编译脚本
buildscript {
ext.kotlin_version ='1.0.3'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
当前工程gradle加入引用
apply plugin:'kotlin-android'
//...
android {
sourceSets {
//添加一个源码文件夹
main.java.srcDirs +='src/main/kotlin'
}
}dependencies {
compile fileTree(include: ['*.jar'], dir:'libs')
testCompile'junit:junit:4.12'
//Kotlin
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
//...
}
以上操作其实只需要在Tools->Kotlin->Configure Kotlin in Project即可自动配置
3. 使用Kotlin的Android扩展插件
kotlin-android-extensions使用这个插件,再需要调用findViewById,XML布局定义的控件,会自动生成引用,对于我们来说现在布局文件就是一个属性
加入编译脚本(避免误人子弟这个版本已经很旧了,版本号自行修改)
buildscript {
ext.kotlin_version ='1.0.3'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
}
}
加入引用
apply plugin:'kotlin-android'
apply plugin:'kotlin-android-extensions'
//...
dependencies {
compile fileTree(include: ['*.jar'], dir:'libs')
testCompile'junit:junit:4.12'
//Kotlin
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
//...
}
另外还可使用Anko,Anko目的是用代码来代替XML生成布局,加入引用即可
apply plugin:'kotlin-android'
apply plugin:'kotlin-android-extensions'
//...
dependencies {
compile fileTree(include: ['*.jar'], dir:'libs')
testCompile'junit:junit:4.12'
//...
// Anko
compile 'org.jetbrains.anko:anko-sdk15:0.8.2' // sdk19, sdk21, sdk23 are also available
compile 'org.jetbrains.anko:anko-support-v4:0.8.2' // In case you need support-v4 bindings
compile 'org.jetbrains.anko:anko-appcompat-v7:0.8.2' // For appcompat-v7 bindings
}
MutableList<Data>代表List<Data>表示可变List
二维数组初始化
private var mPoint :Array<Array<Point?>> =Array(3){Array<Point ?>(3,{null})}
- Kotlin的一些基础使用以及在android studio使用与java的不同
- 在你的Android Studio中使用Kotlin
- Kotlin在android studio下的初次使用
- Android Studio Kotlin插件的简单使用
- 在Android Studio中使用Kotlin。
- 在android studio中使用kotlin
- android studio使用的一些细节以及注意事项
- 使用android studio常用的一些快捷键以及常用权限
- Android Studio 使用中遇到的一些问题以及解决方法
- Kotlin与Java的使用区别
- 使用 Kotlin 开发 Android 应用 | 8 个最优秀的 Android Studio 插件 Kotlin Android 素材
- Android studio中Kotlin配置和使用的图文详解
- android studio 使用kotlin编写architecture componets的配置问题
- Java与Kotlin的不同(一)
- Android studio集成svn遇到的一些问题与使用
- Android Studio与Genymotion模拟器结合使用的一些心得
- 在Android中使用kotlin(recyclerview的使用)
- 【Android】使用Kotlin在Android Studio上开发App
- 01-复杂度1 最大子列和问题 (20分)
- 试用rest-assured
- bzoj3126[Usaco2013 Open]Photo 单调队列+dp
- 06-4-用户及组管理初步
- 地理配准后,结果为何无法和底图重合
- Kotlin的一些基础使用以及在android studio使用与java的不同
- 将char转换为unsigned int时
- Linux查看链接库的位数
- ftp——服务器发回了不可路由的地址。使用服务器地址代替。
- 【数据结构笔记】10:三个最短路径算法注解
- The Center of Gravity
- 用Google的gflags轻松的编码解析命令行参数(二)
- 正确的爱情观
- hibernate5使用注解遇到的问题