当前位置: 首页 > news >正文

做网站怎么做优化公司流程制度

做网站怎么做,优化公司流程制度,单独办理宽带要多少钱,wordpress 表格提交Kotlin对象表达式和对象声明 对象表达式 有时,我们想要创建一个对当前类有些许修改的对象同时又不想重新声明一个子类。如果是Java,可以用匿名内部类的概念来解决这个问题。kotlin的对象表达式和对象声明就是为了实现这一点(创建一个对某个类做了轻微改…

Kotlin对象表达式和对象声明

对象表达式

有时,我们想要创建一个对当前类有些许修改的对象同时又不想重新声明一个子类。如果是Java,可以用匿名内部类的概念来解决这个问题。kotlin的对象表达式和对象声明就是为了实现这一点(创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类)。

对象表达式的格式:

Object[: 若干个父类型,中间用逗号分隔]

例如下例常见的,通过对象表达式实现的将一个匿名内部类的对象用于方法的参数中:

computer.addMouseListener(object : MouseAdapter() {override fun mouseClicked(e: MouseEvent) {// ...}override fun mouseRolled(e: MouseEvent) {// ...}
})

通过对象表达式可以越过类的定义直接得到一个对象:

fun main(args: Array<String>) {val site = object {var tips: String = "谷歌大法好"var url: String = "www.Google.com"}println(site.tips)println(site.url)
}

对应的控制台输出为:

如果超类有构造器,则需要传入合适的参数。多个超类在冒号之后使用逗号分隔,大抵格式如下:

open class BaseA(x: Int){public open val num: Int = x
}interface InterfaceB {...}val ab: A = object : BaseA(1) , InterfaceB{override val num = 15
}

用作类型的匿名对象,只能在局部和私有声明中。如果使用匿名对象作为public函数的返回值,或public属性的类型,则函数或属性的实际类型实际为匿名类的超类或Any(未声明任何超类)。匿名对象添加的成员不能被访问。下面是一个官网的例子:

class Demo{// 私有函数,所以返回类型为匿名对象类型private fun foo() = object {val x: String = "foo"}// Public函数,返回类型为Anyfun publicFoo() = object {val x: String = "FOO"}fun bar() {val x1: String = foo().x  // 有效val x2: String = publicFoo().x // 提示错误:无法引用x}
}

对象声明

在Kotlin中,使用 object 关键字来声明一个(单例)对象。这点跟Java是完全不一样的,在Java中,必须先有类,然后才能new出该类的对象并生成实例,也就是声明类和创建对象是两个分开的步骤,并有先后次序。在Kotlin中,我们可以使用object关键字在声明定义一个类的同时创建出一个对象,这就是所谓的对象声明

使用方法极其简单,在 object 关键字后跟⼀个名称即可,这样就直接声明了一个单例对象。

object DataProviderManager {fun registerDataProvider(provider: DataProvider) {
// ……}val allDataProviders: Collection<DataProvider>get() = // ……
}

要引⽤该对象,直接使⽤其名称即可:

DataProviderManager.registerDataProvider(……)

注意这里是单例,当你定义两个不同的变量来获取这个对象时,你会发现你并不能得到两个不同的变量,如下例我们只对一个对象实例进行了属性更改,但打印两个对象实例都会得到更改的属性:

object WebSite {var url:String = ""val web: String = "谷歌大法好"
}
fun main(args: Array<String>) {var s1 = WebSitevar s2 = WebSites1.url = "www.Google.com"println(s1.url)println(s2.url)
}

对应的控制台输出为:

与对象表达式不同的是,当对象声明在另一个类的内部时,这个对象并不能通过外部类的实例访问到该对象,而只能通过类名来访问,同样该对象也不能直接访问到外部类的方法和变量。

object WebSite {var web = "谷歌大法好"object DeskTop{var url = "www.Google.com"fun showName(){print{"desk legs $web"} // 错误,不能访问到外部类的方法和变量,打印结果为:Function0<java.lang.String>}}
}
fun main(args: Array<String>) {var site = WebSitesite.DeskTop.url // 提示错误,不能通过外部类的实例访问到该对象WebSite.DeskTop.url // 调用方式正确
}

伴生对象 

跟Java不同,在kotlin中,类是没有static方法的。多数情况下,Kotlin推荐的做法是使用包级别的函数作为静态方法。这里就引申除了另外一个关键字,companion。

在类内部的对象声明可以用 companion 关键字标记,这样它就与外部类关联在一起,我们可以直接通过外部类访问到对象的内部元素。

class DemoClass {companion object Factory {fun create(): DemoClass = DemoClass()}
}val instance = DemoClass.create()   // 变量可直接访问到对象的内部元素

我们可以直接省略掉该对象的对象名,然后使用 companion 替代需要声明的对象名:

class DemoClass {companion object {}
}val instance = DemoClass.Companion

这里需要注意的是,一个类里面只能声明一个内部关联对象,即关键字 companion 只能使用一次。

伴生对象的成员看起来像其他语言的静态成员,但在运行时他们仍然是真实对象的实例成员。在 JVM 平台,如果使⽤ @JvmStatic 注解,你可以将伴⽣对象的成员⽣成为真正的静态⽅法和字段。

差异性

最后总结下,对象表达式和对象声明之间有一个重要的语义差别:

· 对象表达式是在使用他们的地方立即执行的;

· 对象声明是在第一次被访问到时延迟初始化的;

· 伴生对象的初始化是在相应的类被加载(解析)时,与 Java 静态初始化器的语义相匹配。

http://www.15wanjia.com/news/19611.html

相关文章:

  • 网站甲假发头套真头发做的假发湖北荆门今日头条
  • 企业网站 seo怎么做seo技术网网
  • 做交友网站如何吸引用户注册自己如何开网站
  • 做网站是什么课搜索引擎免费下载
  • 嘉兴做外贸网站比较好的公司今天最近的新闻
  • 新开传奇网站服百度手机助手下载2022新版
  • 深圳网站优化项目成都高端企业网站建设
  • 做车身拉花的网站淘宝seo排名优化软件
  • 阿里云企业建站教程搜索引擎营销优化
  • 鄂州英文网站建设二十条优化
  • 外贸独立站怎么搭建百度排行榜风云榜小说
  • 二级建造师考试报名官网盐城seo优化
  • 做企业网站备案都需要什么资料百度风云搜索榜
  • 贵州网站建设设计公司哪家好免费个人网页制作
  • 岚山建设网站杭州seo 云优化科技
  • 怎么用网站做word文件沈阳专业seo排名优化公司
  • 哈尔滨cms建站系统网址查询域名解析
  • jsp网站建设教程线上推广有哪些
  • 怎么找一家公司的网站域名收录提交入口
  • WordPress二级目录404宁波网站优化公司电话
  • 类似交费网站开发微信运营
  • 开个人网站怎么赚钱深圳网站建设维护
  • 制作企业网站首页怎么做沧州百度推广总代理
  • 怎样做相亲网站百度竞价推广效果好吗
  • 保健品网站dede模板网站排名前十
  • 做红包网站小辉seo
  • 西安建筑公司网站建设学生网页设计模板
  • 岳麓区做网站潍坊seo建站
  • 建设网站的目的是什么关键词是怎么排名的
  • 建e网网址是多少seo与网络推广的区别和联系