您的位置:首页 > 编程语言 > Java开发

Kotlin最简单的入门教程——与Java互相调用

2017-06-15 10:49 447 查看
Kotlin 中调用 Java 代码

import java.util.*

fun demo(source: List<Int>) {
val list = ArrayList<Int>()
// “for”-循环用于 Java 集合:
for (item in source) {
list.add(item)
}
// 操作符约定同样有效:
for (i in 0..source.size() - 1) {
list[i] = source[i] // 调用 get 和 set
}
}


Java 中调用 Kotlin

// example.kt
package demo

class Foo

fun bar() {
}

// Java
new demo.Foo();
demo.ExampleKt.bar();


静态方法

class C {
companion object {
@JvmStatic fun foo() {}
fun bar() {}
}
}

//现在,foo() 在 Java 中是静态的,而 bar() 不是:

C.foo(); // 没问题
C.bar(); // 错误:不是一个静态方法
C.Companion.foo(); // 保留实例方法
C.Companion.bar(); // 唯一的工作方式


可变参数传递

Java 类有时声明一个具有可变数量参数(varargs)的方法来使用索引。

public class JavaArrayExample {

public void removeIndices(int... indices) {
// 在此编码……
}
}
在这种情况下,你需要使用展开运算符 * 来传递 IntArray:

val javaObj = JavaArray()
val array = intArrayOf(0, 1, 2, 3)
javaObj.removeIndicesVarArg(*array)
目前无法传递 null 给一个声明为可变参数的方法。


Java 反射

Java 反射适用于 Kotlin 类,反之亦然。
如上所述,你可以使用 instance::class.java, ClassName::class.java 或者 instance.javaClass 通过 java.lang.Class 来进入 Java 反射。

其他支持的情况包括为一个 Kotlin 属性获取一个 Java 的 getter/setter 方法或者幕后字段、
为一个 Java 字段获取一个 KProperty、为一个 KFunction 获取一个 Java 方法或者构造函数,反之亦然


已映射类型

Java 类型Kotlin 类型
bytekotlin.Byte
shortkotlin.Short
intkotlin.Int
longkotlin.Long
charkotlin.Char
floatkotlin.Float
doublekotlin.Double
booleankotlin.Boolean
一些非原生的内置类型也会作映射:

Java 类型Kotlin 类型
java.lang.Objectkotlin.Any!
java.lang.Cloneablekotlin.Cloneable!
java.lang.Comparablekotlin.Comparable!
java.lang.Enumkotlin.Enum!
java.lang.Annotationkotlin.Annotation!
java.lang.Deprecatedkotlin.Deprecated!
java.lang.CharSequencekotlin.CharSequence!
java.lang.Stringkotlin.String!
java.lang.Numberkotlin.Number!
java.lang.Throwablekotlin.Throwable!
Java 的装箱原始类型映射到可空的 Kotlin 类型:

Java typeKotlin type
java.lang.Bytekotlin.Byte?
java.lang.Shortkotlin.Short?
java.lang.Integerkotlin.Int?
java.lang.Longkotlin.Long?
java.lang.Characterkotlin.Char?
java.lang.Floatkotlin.Float?
java.lang.Doublekotlin.Double?
java.lang.Booleankotlin.Boolean?
请注意,用作类型参数的装箱原始类型映射到平台类型: 例如,List

最后欢迎加入Kotlin QQ群,一起讨论学习:



欢迎关注 微信公号

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息