前言
发现gitHub上各路大神都开始使用Kotlin编写项目了。公司的项目也有部分开始使用Kotlin。所以我也要跟上潮流,首先根据菜鸟教程学习了基础,然后又看了《Kotlin for Android》,结果没有记得多少,看着能认识,用的时候不记得了。还是实践才最有作用,我目前是准备将百度语音的demo,改成kotlin版本,下面是记录一下改写中遇到的问题
一、数据类型的强转
通常,如果转换是不可能的,转换操作符会抛出一个异常。因此,我们称之为不安全的。 Kotlin 中的不安全转换由中缀操作符 as(参见operator precedence)完成:
val s : String = y as String
二、java中静态变量的转化
我们可以在类中的伴生对象中这样写
companion object {
private var isOfflinEnginLoaded = false
private var isInited = false
private val TAG = "MyRecognizer"
}
静态方法也同样写到伴生对象中
companion object {
private val ERROR_NONE: Int = 0
fun parseJson(jsonStr: String): RecogResult {
var result = RecogResult()
try {
val json = JSONObject(jsonStr)
val error = json.optInt("error")
result.error = error
result.subError = json.optInt("sub_error")
result.resultType = json.optString("result_type")
if (error == ERROR_NONE) {
result.origalResult = json.optString("origin_result")
val arr = json.optJSONArray("results_recognition")
if(arr != null) {
val size = arr.length()
var recogs = arrayOfNulls<String>(size)
for (i in 0 until size) {
recogs[i] = arr.optString(i)
}
result.resultRecognition = recogs
}
}
} catch (e: JSONException) {
e.printStackTrace()
}
return result
}
三、工具类的编写
这里就可以直接新建一个kotlin的Object,如下方的Logger对象
object Logger {
private val TAG = "Logger"
private val INFO = "INFO"
private val ERROR = "ERROR"
private var ENABLE = true
private var handler: Handler? = null
fun info(message: String){
info(TAG, message)
}
fun info(tag: String, message: String) {
log(INFO, tag, message)
}
fun error(message: String) {
error(TAG, message)
}
fun error(tag: String, message: String) {
log(ERROR, tag, message)
}
fun setHandler(handler: Handler) {
Logger.handler = handler
}
private fun log(level: String, tag: String, message: String) {
if (!ENABLE) return
if (level == INFO)
Log.i(tag, message)
else if (level == ERROR)
Log.e(tag, message)
if (handler != null) {
val msg = Message.obtain()
msg.obj = "[$level]$message\n"
handler!!.sendMessage(msg)
}
}
fun setEnable(isEnable: Boolean) {
ENABLE = isEnable
}
}
四、定义一个变量初始值为null
var description: String? = null
五、Kotlin中的数组
var titles : Array<String> = arrayOf("title")
var ids: IntArray = intArrayOf(1)
var byteArray : ByteArray = byteArrayOf("s".toByte())
var longArrat: LongArray = longArrayOf(13L)
六、抛出异常
@Throws(FileNotFoundException::class)
constructor(inputS: String) : this() {
inputStream = FileInputStream(inputS)
}