与Java的差异
常见差异
比较内容 | Kotlin | Java |
---|---|---|
this对象 | this@MainActivity | MainActivity.this |
类 | MainActivity::class.java | MainActivity.class |
继承 | class MainActivity : AppCompatActivity() 在 Kotlin 中被继承类必须被open关键字修饰(默认是final的) |
public class MainActivity extends AppCompatActivity |
变量 | 不可变变量 val intent = Intent() 可变变量 var intent = Intent() |
Intent intent = new Intent(); |
静态常量 | const val TEXT = “text” | static final String TEXT = “text”; |
方法 | 无返回值 fun doAction() {} 有返回值 fun getNumber() : Int { return 5} 或者 fun getNumber() = 5 |
无返回值 void doAction() {} 有返回值 int getNumber() {return 5;} |
类型判断 | “text” is String | “text” instanceof String |
字符串占位 | val number = 100 val text = “数量 = ${number}” |
int number = 100; String text = String.format(“数量 = %d”, number); |
容器 | val array = arrayOf(1,2,3) val list = listOf(1,2,3) val map = mapOf(Pair(1, “one”), Pair(2, “two”), Pair(3, “three”)) |
略 |
for循环 | val array = arrayOf(1,2,3) for (i in array.indices) { pringln(i) } |
略 |
访问权限
Kotlin | 作用域 | Java | 作用域 |
---|---|---|---|
public | 与java相同 | public | 所修饰的类、变量、方法,在内外包均具有访问权限 |
internal | 在Kotlin有一个模块的概念,定义为internal的对象,同一模块是可以相互访问的 | protected | 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问 |
protected | 与java相同 | default | 只对同包的类具有访问的权限,外包的所有类都不能访问 |
private | 与java相同 | private | 私有的权限,只对本类的方法可以使用 |
Kotlin语法
判断器
var count = 1
when (count) {
0 -> {
println(count)
}
in 1..2 -> {
println(count)
}
else -> {
println(count)
}
}
构造函数
class MyView : View {
constructor(context : Context) : this(context, null) {
}
constructor(context : Context, attrs : AttributeSet?) : this(context, attrs, 0) {
}
constructor(context : Context, attrs : AttributeSet?, defStyleAttr : Int) : super(context, attrs, defStyleAttr) {
}
}
枚举
enum class Sex (var isMan: Boolean) {
MAN(true), WOMAN(false)
}
匿名内部类
object:Callback {
override fun onSuccess() {
}
override fun onFail() {
}
}
内部类
inner class InnerClass{
}
内部类访问外部变量
var name = "外部变量"
inner class MyTask {
var name = "内部变量"
fun show() {
println("我是内部变量:$name,我是外部变量${
this@MainActivity.name})
}
}
抽象类
abstract class BaseActivity : AppCompatActivity(), Runnable {
abstract fun init()
}
静态变量和静态方法
在Kotlin中被称为伴生对象
companion object ToastUtils {
var sToast : Toast? = null
fun show() {
sToast!!.show()
}
}
可变长参数
fun add(vararg array: Int) : Int {
var count = 0
array.forEach {
count += it
}
return count
}
构造代码块
class MainActivity : AppCompatActivity() {
var number = 0
init {
number = 1
}
}
静态代码块