这两天看了一些文章,有部分公司开始要求掌握kotlin的编写了。毕竟kotlin作为google大佬在背后撑腰的语言,优势还是蛮大的,所以觉得将这两天做的项目转化一下,学习一下kotlin的编写。
首先,从最开始的helloworld开始学起。
使用AS编写kotlin跟java实际上没有太大的区别,在新建项目的时候,将使用的语言从java改成kotlin就可以了。
这样,一个新鲜出炉的kotlin项目就出来了~
然后就是喜闻乐见的改xml。跟java一样,改动一下,xml就完成了
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
回到kt文件(也就是对应java的class文件),我们可以看到extends变成了一个小小的冒号(可爱的朋友你是否也有很多冒号?)
扩展:除了extends。implement也变成了冒号,但是如果前面已经有一个冒号了,就改成一个小逗号,,这里还有一个区别,如果是类名,后面是需要加上括号的,而接口则不用
class MainActivity : AppCompatActivity() , SurfaceHolder.Callback {
在声明常量和变量方面,也变得简单了(我觉得不是很简单,至少我习惯了java的写法之后,有部分声明看的我云里雾里的。)
常量用val声明,变量用var声明,非空变量可以使用lateinit稍后赋值,其他的都需要在声明时直接赋值:
//可空变量
var mRealPlaySh: SurfaceHolder? = null
//非空变量
var lateinit mRealPlaySh:SurfaceHolder
//常量
val serialNo = "aaaaaaasdwe";
其中我们可以看到,在声明变量的时候还需要把他的类型写在变量名之后,用冒号隔开。常量的话可以写也可以不写
还有一个,在声明变量的时候,很多修饰符都失去了作用或者重做了。其中,在为添加修饰符的情况下,默认为 final public 。可以根据自己情况修改为open ,private等。final和open的区别在于是否可重写,重写需要再添加override。同时,静态修饰符取消,改成了伴生对象,具体实现是:
//java
private final static int MSG_ON_DEVICE_RESPONSE = 1
//kotlin
companion object{
private final val MSG_ON_DEVICE_RESPONSE= 1
}
函数方面,需要用到fun来声明,拿最简单的onCreate来说明:
//java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
简单明了的更换。而像子线程这种,则将new字段改成object:
//java
new Thread() {
@Override
public void run() {
super.run();
try {
mDeviceInfoList = EZOpenSDK.getInstance().getDeviceList(0, 20);
mHandler.sendEmptyMessage(MSG_ON_DEVICE_RESPONSE);
} catch (BaseException e) {
e.printStackTrace();
}
}
}.start();
//kotlin
object : Thread() {
override fun run() {
super.run()
try {
mDeviceInfoList = EZOpenSDK.getInstance().getDeviceList(0, 20)
mHandler.sendEmptyMessage(MSG_ON_DEVICE_RESPONSE)
} catch (e: BaseException) {
e.printStackTrace()
}
}
}.start()
val textView = findViewById(R.id.textView) as TextView
textView?.setOnClickListener{
Toast.makeText(this@MainActivity,R.string.click_tip,Toast.LENGTH_LONG).show()
}
点击监听也有了一些区别(区别不大):
//java
TextView textView = (TextView)findViewById(R.id.textView)
textView .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(this@MainActivity,R.string.click_tip,Toast.LENGTH_LONG).show()
}
});
//kotlin
val textView = findViewById(R.id.textView) as TextView
textView?.setOnClickListener{
Toast.makeText(this@MainActivity,R.string.click_tip,Toast.LENGTH_LONG).show()
}
今天就到这里结束。明天再介绍在改动时踩的一些坑。