在一个体重秤项目里面使用Kotlin开发,考虑到项目比较小型轻量,所以和团队申请决定使用Kotlin开发,以此熟悉和尝试一下Kotlin。

首先使用Kotlin之后,发现能和Java很好的兼容一起,开发体验很不错。在开发过程中,遇到了需要使用匿名内部类的场景,然后就了解到Kotlin的object关键字。

object关键字:

在Kotlin中,object通常有三个用途:

  1. 对象表达式
  2. 对象声明
  3. 伴生对象

对象表达式

对象表达式可以实现Java中匿名内部类的效果,但比Java更加友好。

(1)Kotlin的匿名内部类(对象表达式)能被调用添加的方法。(匿名对象只有定义成局部变量和private成员变量时,才能被调用添加的方法。)

(2)Kotlin的匿名内部类能继承一个类和实现多个接口。

// 定义
open class A{}
interface B{}
interface C{}

// 使用object关键字创建匿名对象
var obj = object:A(),B,C{
    fun say(){
         println("Hello World!")
    }
}
// 可以调用匿名对象添加的方法
obj.say()

对象声明

object关键字作用等同于class,同时还会生成该类的单例对象(注意该类的构造器已经私有,不能被继承)。

object Person {
    var name = "name"
}

// 调用println(Person.name)

伴生对象

在Kotlin中是没有static关键字的,所以通常使用伴生对象来达成一样的作用。

class A{
    companion object 伴生对象名{
        // 伴生对象名是可以省略
    }
}

如果伴生对象名省略,则默认是Companion,在Kotlin代码中调用通过:

(1)类名.Companion.方法名称或变量

(2)类名.方法名称或变量

Companion其实是一个生成的静态内部类,外部类持有Companion实例对象。

【编程语言】Kotlin之object关键字的更多相关文章

  1. 谷歌钦定的编程语言Kotlin大揭秘

    第一时间关注程序猿(媛)身边的故事 谷歌钦定的编程语言Kotlin大揭秘 语法+高级特性+实现原理:移动开发者升职加薪宝典! 谷歌作为世界级的科技公司巨头,强悍的技术研发与创新能力使其一直是业界的楷模 ...

  2. Kotlin 对象表达式和对象声明

    Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类. 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: window.ad ...

  3. Kotlin入门(18)利用单例对象获取时间

    前面介绍了,使用扩展函数可以很方便地扩充数组Array的处理功能,例如交换两个数组元素.求数组的最大元素等等.那么除了数组之外,日期和时间的相关操作,也是很常见的,比如获取当前日期,获取当前时间.获取 ...

  4. 阿里钉钉Android实习面试也太太太太难了吧,对算法的要求堪比字节

    本人研究生在读,在2月26日找了师兄内推阿里钉钉团队,28号接到了约1面的电话.幸好我提前准备了一个多月的样子,刷面试题.刷LeetCode(面了之后才觉得自己刷少了),对于我这样一个实习生来说题目还 ...

  5. Kotlin中的object 与companion object的区别

    之前写了一篇Kotlin中常量和静态方法的文章,最近有人提出一个问题,在companion object中调用外部的成员变量会调用不到,这才意识到问题,本篇文章会带着这个疑问来解决问题. 一. obj ...

  6. kotlin Hello World 以及关键字

    hello world:(支持函数式编程,不需要放到 class 中) fun main(args: Array<String>) { println("Hello World& ...

  7. delphi的几个特别关键字 object absolute

    1.object关键字相当于C++中的struct, record定义个结构体只能定义数据,而object可以定义方法,默认都是public的.   代码示例如下: TTest = record na ...

  8. Kotlin基本语法和使用

    Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性. Kotlin是使用Java开发者的思维被创 ...

  9. Kotlin——从无到有系列之高级篇(一):Lambda表达式

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 经过前面一系列对K ...

随机推荐

  1. spring boot集成aop实现日志记录

    1.pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  2. .Net Core:Middleware中间件管道

    .NetCore中的Middleware是装配到管道处理请求和响应的组件:每个组件都可以决定是否继续进入下一个管道.并且可以在进入下一个管道前后执行逻辑: 最后一个管道或者中断管道的中间件叫终端中间件 ...

  3. encode和decode区别

    在python2 中是这种,编解码格式.在python3 中编码是会转换成byte类型即只显示ASCII码里的,编码会将byte转换成字符串类型.因此在py3中不需要使用,如果想要特定编码,在文件开头 ...

  4. audio google play()

    <audio id="music" src="" preload loop="loop" autostart="true&q ...

  5. redis 简单的注册

    首页写一个页面 <form method="post" action="hreg.php"> Name:<input type="t ...

  6. laravel 核心类Kernel

    vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php.是laravel处理网络请求的最核心类,在app容器准备好了之后, ...

  7. CLASS 类 __getattr__

    class Chain(object): def __init__(self, path=''): self._path = path def __getattr__(self, path): ret ...

  8. rpm 数据库

    rpm 数据库 /var/lib/rpm

  9. js开发环境配置

    使用Sublime Text3作为主要开发工具.下载地址:http://www.sublimetext.com/3. sublime拥有大量实用插件,使用插件需要先下载PackageControl以便 ...

  10. 用JDBC连接 数据库 进行简单的增删改查

    JDBC为java的基础.用jdbc实现对数据库的增删改查的功能是程序员的基本要求.本例以mysql为例,首先要使用本例需要添加mysql-connector-java-5.1.7-bin.jar包. ...