(十六)Kotlin简单易学 基础语法-对象
对象
object关键字
? 使用object关键字,你可以定义一个只能产生一个实例的类-单例 ? 使用Object关键字有三种方式 ? 对象声明 ? 对象表达式 ? 半生对象
对象声明
对象声明有利于组织代码和管理状态,尤其是管理整个应用运行生命周期内的某些一致性状态。
object ApplicationConfig{
init {
print("ApplicationConfig init")
}
fun doSomething(){
print("doSomething")
}
}
fun main() {
ApplicationConfig.doSomething()
println(ApplicationConfig)
println(ApplicationConfig)
}
ApplicationConfig initdoSomethingkotlin05.ApplicationConfig@36d64342
kotlin05.ApplicationConfig@36d64342
对象表达式
有时候你不一定非要定义一个新的命名类不可,也许你需要某个现有类的一种变体实例,但只需要用一次就行了,事实上对于这种用完就丢的实例,连命名都可以省了。这个对象表达式是xx的字类,这个匿名类,依然是遵循object关键字的一个规则,即一旦实例化,该匿名只能有唯一一个实例存在。
open class Play{
open fun load() = "load "
}
fun main() {
val value = object : Play() { override fun load() = "anonymous nothing" }
println(value.load())
}
伴身对象
如果你想将某个对象的初始化和一个类实例捆绑在一起,可以考虑使用伴生对象,使用companion修饰符,你可以在一个类定义声明一个伴生对象,一个类里只能有一个伴生对象。
open class ConfigMap{
companion object{
private const val Path ="xxx"
fun load()= File (Path).readBytes()
}
}
fun main() {
ConfigMap.load()
}
嵌套类
如果一个类只对另一个类有用,那么将其嵌入到该类中并使用这个两个类保持在一起是合乎逻辑的,可以使用嵌套类。
class Player {
class Equipment(var name:String){
fun show() = print("Equipment $name")
}
fun battle(){
}
}
fun main() {
Player.Equipment("sharp knife").show()
}
数据类
数据类,是专门设计用来存储数据的类 数据类提供了toString的个性化实现 ==符号默认情况下,比较对象就是比较它们的引用值,数据类提供了equals和hashCode的个性化实现
data class Coordinate(var x:Int,var y:Int){
val isInBound = x>0&& y>0
}
fun main() {
println(Coordinate(10,20))
}
比较对象
data class Coordinate(var x:Int,var y:Int){
val isInBound = x>0&& y>0
}
fun main() {
println(Coordinate(10,20)==Coordinate(10,20))
}
|