kotlin 语法记录

233 阅读1分钟

1. ?、?. 、?:和 !!.

//? 表示当前对象可以为null
var a:String? = null

//kotlin
a?.start()

//相当于java
if(a!=null){
    a.start();
}
//kotlin
a!!.start()

//相当于java
if(a!=null){
    a.start();
}else{
    throw new KotlinNullPointException();
}

//?:表示左边为空就执行右边的操作
var a:String? = "hello"
//此时b=5
var b=a?.length ?: 100

再比如以下两行代码

class MyFragment:Fragment() {
    private var myFragmentBinding:FragmentMyBinding? = null

    private val binding get() = myFragmentBinding!!
}

编译后如下所示

public final class MyFragment extends Fragment {
   private FragmentMyBinding myFragmentBinding;

   private final FragmentMyBinding getBinding() {
      FragmentMyBinding var10000 = this.myFragmentBinding;
      Intrinsics.checkNotNull(var10000);
      return var10000;
   }
}

大概意思就是第一行声明一个可以为空的myFragmentBinding变量,第二行获取这个变量,!!代表为空时就抛出异常,从checkNotNull方法源码中可以看出来:

public static void checkNotNull(Object object) {
    if (object == null) {
        throwJavaNpe();
    }
}
......

@SinceKotlin(version = "1.4")
public static void throwJavaNpe() {
    throw sanitizeStackTrace(new NullPointerException());
}

2.data class

使用data class来创建javaBean类,可以自动生成一些属性方法,比如toString、equals、hashcode和get、set方法等等。