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)