Kotlin学习笔记:类声明、修饰符、伴生对象,替代static、单例模式...
一、Kotlin类声明:
class MainActivity : AppCompatActivity()
class MainActivity : AppCompatActivity(), OnClickListener
Kotlin的类默认都是public final的,如果不需要final修饰符,可以手动在class前添加open修饰符
open class MainActivity : AppCompatActivity()
open class MainActivity : AppCompatActivity(), OnClickListener
二、
Kotlin修饰符:
private 、protected 、 public跟java的相同。
internal 是kotlin特有的修饰符,只有同个模块(Module)的类才可以访问,其他模块的则不能访问
三、Kotlin伴生对象,替代static
public class StringUtils {
public static boolean isEmpty(String string){
return "".equals(string);
}
}
在Java中我们常看到上述写法,但是在kotlin中却不行,因为kotlin中没有static修饰符,有两种方法可以替代,一是jvm static注释的方法,第二种就是用伴生对象替代,如下:
class StringUtils {
companion object {
fun isEmpty(string: String): Boolean {
return "" == string;
}
}
}
companion object要写在一个类的内部,作为这个类的伴生对象存在。
四、Kotlin单例模式:
class Singleton private constructor() {
companion object {
fun getInstance(): Singleton {
return Holder.instance
}
}
private object Holder {
val instance = Singleton()
}
}
五、Kotlin动态代理:
/**
* 动态代理
*/
interface Animal{
fun bark()
}
class Dog:Animal{
override fun bark() {
println("汪汪")
}
}
class Zoo(animal: Animal) : Animal by animal
fun main() {
Zoo(Dog()).bark()
}
kotlin会动态代理在编译时转为静态代理去调用,所以kotlin的动态代理一定比java的动态代理的效率高。因为java的动态代理是通过一系列反射实现的。
六、Kotlin循环:
for (i in 1..10){
println(i)
}
//结果:打印1到10
for (i in 1 until 10){
println(i)
}
//结果:打印1到9
for (i in 10 downTo 1){
println(i)
}
//结果:打印10到1
for (i in 1..10 step 2){
println(i)
}
//结果:打印1,3,5,7,9
repeat(10){
println(it)
}
//结果:打印0到9
val list: ArrayList<String> = arrayListOf("a", "b", "c", "d")
//类似java的写法
for (str: String in list) {
println(str)
}
//kotlin 解构写法
for ((index,str) in list.withIndex()){
println("第${index}个元素是$str")
}
THE END