kotlin進階

1、kotlin單例
最近寫單例類發現一個問題,私有構造函數怎麼寫
java代碼

public class HttpUtils {
    private HttpUtils utils = new HttpUtils();
    private HttpUtils(){}
    public HttpUtils getIntence(){
        return utils;
    }
}

kotlin代碼

class HttpUtils private constructor() {
    val intence = HttpUtils()
}
//靜態
class ToastUtils private constructor() {
    val intence: ToastUtils
        get() = utils
    companion object {
        private val utils = ToastUtils()
    }
}

按照上述寫法的問題就是kotlin中調用靜態變量都需要.Companion.utils
在java中時非常醜陋的,所以修改如下

companion object {
        private val utils = ToastUtils()
        fun getIntence():ToastUtils{
            return utils;
        }
    }

刪去了 intence的聲明

2、賦值爲空
Java中有一個判斷是
if((str=bufferedReader.readLine())!= null)
這句話到了kotlin轉不過來
最初我是這麼寫的
var str=bufferedReader.readLine()
while(str != null){
執行代碼
}
可是讀到bufferedReader.readLine()=null時報錯了
java.lang.IllegalStateException: bufferedReader.readLine() must not be null
問題在哪呢?問題在str的聲明上
改成
var str: String ?=null
str=bufferedReader.readLine()
while (str != null) {
buffer.append(str)
str = bufferedReader.readLine()
}
就不再報錯了,因爲在後一種聲明方式中str允許爲空了

3、return
在kotlin線程中return時會報錯,正確的方式是
return@Runnable

關於?的使用問題

var outourStream:OutputStream ?= conn?.outputStream;
  var printWriter: PrintWriter = PrintWriter(conn?.outputStream)

當直接去接受不確定有值的對象時 ?=,

4、數組聲明
byte[] bytes = new byte[1024];
需要
bytes = ByteArray(1024)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章