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)