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)

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