在习惯java的开发之后,使用kotlin进行编码,总有那么些不自然。
静态类的定义:
全局静态(实际上是单例模型)
直接将类声明为object,那么所有的函数也就静态的了,这种一般适用于各种util的类。
object UIUtil {fun toast(context:Context,msg:String){Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();}
}
- 在kotlin代码中调用:
UIUtil.toast(context,"testmsg")
- 在java类中调用:
UIUtil.INSTANCE.toast(context,"java invoke static test");
这里要注意,在java类中一定要带上INSTANCE
部分静态(伴生对象)companion
别名方式:staticRun,调用时候是staticRun对象
class Foo {fun test(){Log.i(TAG,"run")}companion object staticRun{val TAG:String = ""fun test(){}}
}
kotlin 调用:Foo.test()
java 调用:Foo.staticRun.test();
或
class Foo {fun test(){Log.i(TAG,"run")}companion object {val TAG:String = "Foo"fun test(){Log.i(TAG,"run")}}
}
与别名方式不一样,这里是默认的Companion对象
kotlin调用:Foo.test()
java调用:Foo.Companion.test();
一个类中只能有一个 companion object 代码块,上面两种定义方式不能同时在一个类中。
由此可见有kolin的空间里面没有“静态”的概念,有java静态调用模型,取而代之的是对象模型object。