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()
...
}