Java项目用kotlin重构

1、使用Android studio开发的app,在mac上的快捷键是command+A,这个可以自由设置,大家可以去Prefrences-> keymap ->搜索 find action or option name,查看对应的快捷键。打开窗口 :find action or option name 之后, 输入convert java file to kotlin file.  


2、点击确认之后当前的java类就会自动转换为kt结尾的文件,当然也会有很多错误爆红,需要我们手动更改。写这个文章主要是记录一下我在这样操作重构之后需要注意到的问题:

第一个问题:kotlin对于对象为null的情况有严格的界定,编码的阶段就需要用代码表明引用是否可以为null,为null的情况需要强制性的判断处理。例如声明

var source:String? =null

这里的 ?即代表这个source值可以为空

或者 lateinit var source:String 

这里的lateinit指之后再初始化,程序员再写代码的时候就明晰的清楚这个对象什么时候有值,什么时候需要判断是否为空。 

不仅仅是变量声明,方法中的参数声明类型也要告知是否可为空,例如不为空的参数传入可能为空的值,需要加!!告知这个值肯定不为空,若!!之前的参数为空就会报出kotlinNullPointerException。

第二个问题:关于kotlin语言中使用butterknife,网上也给出了很多解决办法,我是直接使用

kotlin-android-extensions
,注意使用时,在Fragment中需要覆写onCreateView中准确传入布局,并且在OnViewCreated中才可以直接使用组件操作初始化之类,否则就会报错找不到该组件。在ViewHolder中kotlin也提供了准确的解决办法,实现以下接口

import kotlinx.android.extensions.LayoutContainer
在ViewHolder的构造函数中传入对应的布局View,即可找到对应组件。

第三个问题:在继承DialogFragment时,同样需要覆写上述第二个问题中的方法,当然也可以是直接在OnCreateDialog方法中用传入的view手动找到组件并操作。另外要说的是在使用metarialDialog的时候不可覆写OncreateView,会在onActivityCreated方法中报错,metarialDialog不支持setContentView方法,需要在onCreateDialog方法中就手动找组件并且初始化。

第四个问题:我使用的是AS版本是3.0.1,gradle是3.0.1,kotlin插件为目前最新1.2.21版本,网上有报出一些要降级gradle的问题,我是选择了升级,kotlin最新版本是解决了gradle相关的问题,还算顺利,期间出现GC OOM 相关的问题,在build.gradle中加入了 

androidExtensions {
    experimental = true
}

第五个问题:kotlin中声明一个非val类型的变量,编译器都会默认提供setter和getter方法,反过来说,java中有一个方法setData,转成kotlin就只是一个声明变量而不是一个方法。这个问题在接口转换时造成很多问题,所以在转换前,把需要覆写和实现的方法检查是否使用set和get开头需要更改为其他。

开始的时候并不容易很多问题,现在回想只能记住少许,第一次写就是大概阐述了以下,当是记录了。如果有想再写,会更详细一些了。后续有问题会添加进来。

猜你喜欢

转载自blog.csdn.net/guoyingmiss/article/details/79279798