美文网首页
多彩的类

多彩的类

作者: warmingood | 来源:发表于2018-05-17 15:49 被阅读0次

1.数据类

将一个类设置为data类之后,kotlin会默认实现里面的toString等等一些方法
数据类的主构造器的所有参数必须标记为 val var :数据类不能是抽象类、 open类,它也不能继承自任何其他类(但可以实现接口)

data class Leaf(val size:String, val color:String, val shape: String)

数据类可以快速解包

fun main(args:Array<String>){
  val leaf = Leaf("18","red","round")
  val (size, color, shape) = leaf
}

2.泛型

class Container<T>(thing:T){
  val thing: T = thing
}

val c = Container<Int>(1)
// 也可以省略<> kotlin 能自动根据你传入的值判断它的类型
val c2 = Container("min")

3.对象表达式

object关键字
不需要显性地声明一个新的类,用对象表达式新建的对象我们可以视为匿名类的实
例,而且该匿名类只能使用一次。

interface Three{
  fun interfunction()
}

open class One(arg:Int){
  val arg = arg
  open funclassfunction(){
    print("我是类里面的方法")
  }
}

var two = object:One(20),Three{
  override fun interfunction(){
    print("mmmm")
  }
  override fun funclassfunction(){
    print("dfasd")
  }  
  override var arg:Int = 100

}

4.伴生对象companion

所谓伴生,就是伴生对象在外部类声明的同时也被声明了,私有化构造个方法,加上伴生对象就可以进行单例模式

class Person private constructor(name:String, age:Int){
  val name = name
  val age = age
  companion object instance{
    val person = Person("min", 18)
    fun getInstance():Person = person
  }
}

Person.insatance.getInstance()

补充

1.枚举

enum class logLevel{
  VERBOSE,DEBUG,INFO,WARN,ERROR,ASSERT
}
// 其实就是单例模式
class logLevel private constructor(){
  companion object{
    val VERBODE = logLevel()
    val DEBUG = logLevel()
    val INFO = logLevel()
    ......
  }
}
2.密封类(sealed Class)
子类可数
必须定义为密封类的内部类或者同一个文件下的类

sealed class PlayCmd{
class play(val url:String, val position:Long = 0):PlayCmd()
class Seek(val position:Long):PlayCmd()
object Pause:PlayCmd()
...
}

相关文章

网友评论

      本文标题:多彩的类

      本文链接:https://www.haomeiwen.com/subject/ueivdftx.html