Android java项目转型kotlin的记录

这两天看了一些文章,有部分公司开始要求掌握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()
        }

今天就到这里结束。明天再介绍在改动时踩的一些坑。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值