自定义View中的MeasureSpec的创键规则
一、与对象相关
1、对象表达式:相当于Java匿名类部类,在使用的地方被立即执行:
像 java 的匿名内部类一样,对象表达式可以访问闭合范围内的变量 (和 java 不一样的是,这些变量不用是 final 修饰的)
val a = 10
val listener = object : Info("submit"),IClickListener {
override fun doClick() {
println("a:$a")
}
}
listener.doClick() // 打印 a:10
print(adHoc.x + adHoc.y)
fun countClicks(window: JComponent) {
var clickCount = 0
var enterCount = 0
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
clickCount++
}
override fun mouseEntered(e: MouseEvent){
enterCount++
}
})
}
对象申明
Kotlin 中我们可以方便的通过对象声明来获得一个单例,对象声明是延迟加载的, 在第一次使用的时候被初始化,对象声明不是一个表达式,不能用在赋值语句的右边,对象声明不能在局部作用域(即直接嵌套在函数内部),但是它们可以嵌套到其他对象声明或非内部类中,
object MyInfo: Info("submit"),IClickListener {
override fun doClick() {
println("MyInfo do click, $text") // Log: MyInfo do click, , submit
}
}
fun main(args: Array<String>) {
MyInfo.doClick()
}
class Site {
var name = “"
object DeskTop{
var url = "www.runoob.com"
fun showName(){
print{"desk legs $name"} // 错误,不能访问到外部类的方法和变量
}
}
}
fun main(args: Array<String>) {
var site = Site()
site.DeskTop.url // 错误,不能通过外部类的实例访问到该对象
Site.DeskTop.url // 正确
}
伴随(生)对象
class Books(var name: String, val page: Int) {
companion object ComBooks{
val a : Int = 10
fun doNote() {
println("do note")
}
}
}
fun main(args: Array<String>) {
Books.ComBooks.doNote()
println("Book.a = ${Books.ComBooks.a}")
println("-------------")
Books.doNote()
}