从JavaScript数组中删除元素是开发人员经常遇到的常见编程范例。与许多JavaScript一样,这并不像它应该的那么简单。...使用splice删除一个元素() 这个方法是在卸下,更换,和/或添加数组中的元素的通用方式。它与其他语言中的splice()函数类似。基本上,你采取一个数组并有选择地删除它的一部分(又名“拼接”)。...另外,请记住,数组在JavaScript中是零索引的。...要删除数组的第一个元素: ["bar", "baz", "foo", "qux"] list.shift()["baz", "foo", "qux"] 按值搜索和删除特定元素 indexOf()命令返回在该给定元素可以在阵列中可以发现...结论 归结起来,在JavaScript中从数组中删除元素非常简单。命名约定起初可能有点奇怪,但是一旦你做了几次,你就可以不经过深思熟虑(或者第二次看这篇文章)。
第9章 文件IO操作、正则表达式与多线程 我们在《第6章 扩展函数与属性》中已经介绍过Kotlin中的类扩展的特性。...: String, charset: Charset = Charsets.UTF_8): Unit 在文件末尾追加写入text字符串 File.appendBytes(array: ByteArray...Kotlin的Any类似于Java的Object,但是没有wait(),notify()和notifyAll() 方法。 那么并发如何在Kotlin中工作呢?...当然,在 Kotlin 中我们有更好用的协程并发库。在代码工程实践中,我们可以根据实际情况自由选择。...本章小结 Kotlin 是一门工程实践性很强的语言,从本章介绍的文件IO、正则表达式以及多线程等内容中,我们可以领会到 Kotlin 的基本原则:充分使用已有的 Java 生态库,在此基础之上进行更加简单实用的扩展
在Kotlin 1.2中,团队增加了在JVM和JavaScript之间重用代码的可能性。...跨平台 跨平台项目是 Kotlin 1.2 中的一个新的实验性功能,它允许开发者从相同的代码库构建应用程序的多个层——后端、前端和Android应用程序,在这个跨平台方案中,主要包含三个模块。...这也使得可调用的引用在你引用外部接收者的成员的lambda中更方便。 弃用 Kotlin1.2版本也弃用了很多不合理的东西。...单参数形式在Kotlin 1.2中产生警告,并将被放在Kotlin 1.3中。...为确保与新模块系统的兼容性,Kotlin做出的另一个更改是将kotlin.reflect从kotlin-reflect库中移除。
原文链接是《What's New in Kotlin 1.2》,下面的译文节选了“其它的语言特性”部分(“Other Language Features”) 通过注解声明数组变量 从Kotlin1.2...例如,当lambda表达式在构造一个对象时,允许将延迟初始化属性作为构造参数传过去。...如果你在调用一个返回“T”的泛型方法时,试图将它的返回值“T”转换为特定类型如“Foo”,编译器现在知道这个方法调用中的“T”其实是“Foo”类型。...CharSequence)?.firstOrNull() if (firstChar !...比如下面这样: fun main(args: ArrayString>) { val flag = args.size == 0 //sampleStart var
这里想要进行写操作,kotlin是不允许的!!! } 那么如何解决呢?...所以kotlin对这种情形进行了限制。 解决方法就是禁止从from写入,告诉编译器我只读取from即可!...fun copy(from: ArrayString>, to: Array) { } fun test(){ val strs: ArrayCharSequence> =...arrayOf("1") val any = Array(3) { "" } copy(strs, any)//正确,CharSequence是String的超类,符合在kotlin中,默认的超类类型上限是Any?,在定义超类型的时候,只能指定一个超类,比如中只能指定T的超类上限是SupperT,而不能指定多个。
基本类型 Java type Kotlin type byte kotlin.Byte short kotlin.Short int kotlin.Int long kotlin.Long char kotlin.Char...float kotlin.Float double kotlin.Double boolean kotlin.Boolean 包装类 Java type Kotlin type java.lang.Byte...kotlin.Deprecated java.lang.CharSequence kotlin.CharSequence java.lang.String kotlin.String java.lang.Number...kotlin.Number java.lang.Throwable kotlin.Throwable List和Map Java type Kotlin read-only type Kotlin...(Mutable)Entry 数组 Java type Kotlin type int[] kotlin.IntArray String[] kotlin.ArrayString
5.2 闭包 其实在 Kotlin 中与其说一等公民是函数,不如说一等公民是闭包。...例如在 Kotlin 中,你可以写出这种怪异的代码 fun main(args: ArrayString>) { test } val test = if (5 > 3) { print...Kotlin 的 Lambda表达式更“纯粹”一点, 因为它是真正把Lambda抽象为了一种类型,而 Java 8 的 Lambda 只是单方法匿名接口实现的语法糖罢了。...首先声明了一个名为printMsg的 Lambda,它接受一个 String 类型的值作为参数,然后在 main 函数中调用它。如果还想省略,你还可以在调用时直接省略invoke,像函数一样使用。...fun main(args: ArrayString>) { printMsg("hello") } Lambda 表达式还有非常多的语法糖,比如 当参数只有一个的时候,声明中可以不用显示声明参数
replace(input: CharSequence, replacement: String): String 把输入字符串中匹配的部分替换成replacement的内容。...那么并发如何在Kotlin中工作呢?放心,Kotlin 既然是站在 Java 的肩膀上,当然少不了对多线程编程的支持——Kotlin通过封装 Java 中的线程类,简化了我们的编码。...还有更简单的方法吗? 且看下文解说。...在 Kotlin 中把这样的操作封装简化了。...当然,在 Kotlin 中我们有更好用的协程并发库。在代码工程实践中,我们可以根据实际情况自由选择。
") //如果x不存在于array中,则输出Out if (x !...判断一个对象是否为一个类的实例,可以使用is关键字 与 Java 中的instanceof关键字类似,但在 Kotlin 中如果已经确定了一个对象的类型,可以在接下来的代码块中直接作为这个确定类型使用。...fun say(str: String): String { return str } 同时,在 Kotlin 中,如果像这种简单的函数,可以简写为 fun say(str: String):...){ } 2.3.3 变参函数 同 Java 的变长参数一样,Kotlin 也支持变长参数 //在Java中,我们这么表示一个变长函数 public boolean hasEmpty(String......true; } return false; } //在Kotlin中,使用关键字vararg来表示 fun hasEmpty(vararg strArray: String?)
本章就教你如何优雅的实现 Kotlin 与 Java 混合编程。...在 Kotlin 中可以省略这个Unit返回类型。...在 Java 中调用 Kotlin 代码 4.1 static 方法 上文已经提到过,在 Kotlin 中没有 static 关键字,那么如果在 Java 代码中想要通过类名调用一个 Kotlin 类的方法...= null var b: String? = null var c: String? = null } 看出区别了吗? 在Kotlin中我们需要在定义变量是就必须给出初始值。...当然,我们换个角度,从语言设计的角度来说,Kotlin这么设计又是很合理的。所有属性要求强制显式的初始化能够更容易的推理代码,明确每个属性在何时何地初始化。
当我们从集合中获取一个值的时候,我们不能都使用Object类型,需要进行强制类型转换。而这个转换过程由于在添加元素的时候没有作任何的类型的限制跟检查,所以容易出错。...在Kotlin中,称为类型投影(type projection)。其主要作用是参数作限定,避免不安全操作。...类似的,我们也可以使用 in 投影一个类型: fun fill(dest: ArrayString>, value: String) {} ArrayString> 对应于 Java 的...super String>,也就是说,我们可以传递一个 CharSequence 数组或一个 Object 数组给 fill() 函数。 类似Java中的无界类型通配符?...我们应该尽量使用泛型方法,也就是说如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法,因为它可以使事情更明白。 本章小结 泛型是一个非常有用的东西。尤其在集合类中。
扩展方法 在之前的文章中我就讲过扩展方法了,这里就不再多赘述,只回顾一下扩展方法的格式: fun Activity.toast(message: CharSequence, duration: Int...因为扩展方法是静态解析的,在添加扩展方法的时候类型为Animal,那么即便运行时传入了子类对象,也依旧会执行参数中声明时类型的方法。...强转与智能转换 在 Kotlin 中,用 is 来判断一个对象是否是某个类的实例,用 as 来做强转。...Kotlin 有一个很好的特性,叫 智能转换(smart cast),在我之前的文章中也提到过。就是当已经确定一个对象的类型后,可以自动识别为这个类的对象,而不用再手动强转。...fun main(args: ArrayString>) { var animal: Animal?
快速上手 如果不知道如何在Kotlin中写一个相当简单的Java表达式。...这里有一个简单的诀窍,就是在AndroidStudio的Java文件中编写一段代码,然后将其粘贴到kt文件中,它会自动转换为Kotlin。 Kotlin优势 它更加易表现:这是它最重要的优点之一。...事件 在Java中,每次我们去声明一个点击事件,都不得不去实现一个内部类,而在Kotlin中,可以直接声明我们要做什么。...没有命名空间 Kotlin 允许你在文件中定义顶级的函数和属性,但是这会带来困扰——所有从 Kotlin 引用的顶级声明无法区分。这让我们有时候在读代码时很难快速确定用的是哪一个函数。...这样你在 Kotlin 中可以通过 FooActions.foo() 调用,但是在 Java 中你必须要这样 FooActions.INSTANCE.foo()这样调用,这看起来很麻烦。
Kotlin 扩展函数 与 JS 的 prototype Kotlin 扩展函数 Kotlin的扩展函数功能使得我们可以为现有的类添加新的函数,实现某一具体功能 。...扩展属性允许定义在类或者kotlin文件中,不允许定义在函数中。 lambda是要作为参数被传入某方法或赋值给某变量的匿名方法的简化表现形式。...fun Activity.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT){ Toast.makeText(this...} } 1.扩展(extensions) 在不修改原类的情况下, Kotlin能给一个类扩展新功能,无需继承该类,也不用任何设计模式(如装饰模式等), Kotlin支持扩展函数和扩展属性!...prototype就是“一个给类的对象添加方法的方法”,使用prototype属性,可以给类动态地添加方法 语法 object.prototype.name=value 实例 在本例中,我们将展示如何使用
【函数的基本用法】 Kotlin声明方式 先跟Java的声明方式对比一下,从onCreate方法入手看看他们的不同 //Java 声明方式 @Override protected void...Kotlin 中引用了空安全机制,允许某个变量为空,就需要在变量类型后面加个“?”...在Java体系中,可变参数可以采用“Object…args”的形式。但是在Kotlin中新增了关键字vararg,表示其后面的参数个数不确定。...以可变的字符串为例 Java写法“String…args”,而Kotlin中的写法“vararg args:Sting?”,函数内部解析的时候,Kotlin会把可变参数当成一个数组。...如果要让该方法同事接收整型和双精度的数组入参,那就得使用泛型T 来自于基类Number 将改为,同时在fun前面加上关键字inline,表示该函数属于内联函数
> collection) 集合操作工具 // 将 Array 中的元素都添加到 List/Set 中 void mergeArrayIntoCollection(Object array, Collection...byte[] copyToByteArray(InputStream in) // 从输入流中读入到字符串中 String copyToString(Reader in) 输出 // 从字节数组到文件...获取方法 // 在类中查找指定方法 Method findMethod(Class ctor) 获取字段 // 在类中查找指定属性 Field findField(Class从 Java 迁移到 Kotlin !
doc_image_1_w1354_h721.jpg 如图,在String.kt没有定义的方法,byteInputStream和replace是怎么被调用的呢?...CharSequence.kt文件 CharSequence类是String的接口类,在kotlin包中。...3.jpg 从源码看,这个接口简单定义了可读String的基本行为,length/get/subSequence。...4.jpg 再看一下Arrays.kt 5.jpg 这个Kotlin文件,定义封装了JVM中byte[],char[],int[]等“低级”行为,其中CharArray就是代表了JVM中char[...上源码截图: 7.jpg 看到这张截图,是不是更简单粗暴了?直接整个类都是java.lang.StringBuilder的别名,Kotlin真是太机智了。
有任何问题,欢迎随时与我交流~ ---- 到目前为止,我们已经了解了Kotlin的基本符号以及基础语法。我们可以看出,使用Kotlin写的代码更简洁、可读性更好、更富有生产力。...类型系统用于定义如何将编程语言中的数值和表达式归类为许多不同的类型,如何操作这些类型,这些类型如何互相作用等。...从01到类型,从类型到接口API,再到软件服务,都可以看做是广义的“类型”范畴。 程序中的变量在程序执行期间,可能会有不同的取值范围,我们可以把变量可取值的最大范围称为这个变量的类型。...>>> "abc"::class class kotlin.String >>> "abc"::class.java class java.lang.String 另外,在Kotlin中,String同样是...Kotlin中,我们不能把 ArrayString> 赋值给 Array。这地方Kotlin类型检查的限制强于Java的数组类型。
这篇文章只是对《为你的APP自定义一个统一的标题栏》这篇文章的Kotlin重写 ---- package com.yongxing.QianJR.widgets import android.content.Context...private var ViewHeight: Int = 0 private var leftTextVisible = View.VISIBLE private var leftText: CharSequence...Int) { this.leftImageVisible = leftImageVisible } fun setTitleText(titleText: CharSequence...Int) { this.rightTextVisible = rightTextVisible } fun setRightText(rightText: CharSequence...context, 5f) } } /** * 获取标题文字 * @return */ fun getTitleText(): String
从编程模型的角度来看,需要考虑以下几点: 应该保留哪个属性(默认为所有声明的属性)?您可以通过使用 注释这些属性来排除属性@Transient。 如何表示数据存储中的属性?...Kotlin 数据类的属性填充 在 Kotlin 中,默认情况下所有类都是不可变的,并且需要明确的属性声明来定义可变属性。...Kotlin 覆盖属性 Kotlin 允许声明属性覆盖来改变子类中的属性。...从编程模型的角度来看,需要考虑以下几点: 应该保留哪个属性(默认为所有声明的属性)?您可以通过使用 注释这些属性来排除属性@Transient。 如何表示数据存储中的属性?...14.2.数据映射和类型转换 本节解释了类型如何映射到 Apache Cassandra 表示和从 Apache Cassandra 表示映射。
领取专属 10元无门槛券
手把手带您无忧上云