首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android面试题之Kotlinobject关键字和companion伴生对象

SingleTest(){ override fun play() = "other loading..." } println(p.play()) } companion伴生对象...将某个对象初始化和一个类实例捆绑在一起 一个类里只能有一个伴生对象 伴生对象只有一个,哪怕类初始化多次 只有在类实例化或是调用伴生对象函数时,伴生对象才会初始化,才会加载到内存 伴生对象方法就类似...Java里static方法实现 //伴生对象 open class ConfigMap{ companion object{ private const val PATH =...() } internal internal 修饰类方法,表示这个类方法只适合当前module使用,如果其他module使用的话,会找不到这个internal方法或者报错.所以 internal 限制了跨...module 方法使用 码字不易,求转发,求点在看,求关注,感谢!

5410

线程安全集合类对象安全么?

之前文章Java并发BUG基础篇中提到过线程安全集合类CopyOnWriteArrayList、ConcurrentHashMap等使用,以及线程安全几种创建方法: Map<String,...下面是我写一个Demo,为了验证一个问题:如何在线程安全存放不安全对象,那么对于集合对象访问是线程安全吗?...下面是我测试在集合存放不安全对象Demo: package com.fun import com.fun.base.constaint.ThreadLimitTimesCount import...JSON ~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~~☢~ INFO-> INFO-> 8 Process finished with exit code 0 最后输出结果是8,可见:在线程安全集合存放线程安全类依然是不安全...在并发状况下,可能会有多个线程进行数组拷贝时使用是一个size,index是固定,因为之前访问这个list线程并没有完成对size修改赋值。

61020
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin之旅——类特性

Kotlin 类特性 写了两篇 PWA 了,今天继续讲回 KotlinKotlin 中有很多非常好特性,扩展方法、伴生对象、原生支持动态代理、伪多继承。今天来详细讲讲。...强转与智能转换 在 Kotlin ,用 is 来判断一个对象是否是某个类实例,用 as 来做强转。...Kotlin 有一个很好特性,叫 智能转换(smart cast),在我之前文章也提到过。就是当已经确定一个对象类型后,可以自动识别为这个类对象,而不用再手动强转。...animal as Dog).bark() } } 伴生对象 在上一篇 Kotlin 与 Java 互转 我们提到这样一段工具类代码 class StringUtils { companion...以下代码将线程安全问题交给虚拟机在静态内部类加载时处理,是一种推荐写法: class Single private constructor() { companion object {

87420

重学 Kotlin —— object,史上最 “快” 单例 ?

对象声明 —— 一个关键字实现单例 ? 伴生对象 —— static 代替者 ? 对象表达式 —— Kotlin 匿名内部类 ? 这到底是哪种用法 ?...私有构造函数 通过静态字段对外提供实例 静态代码块中直接初始化,线程安全 。 这里插播一个问题,static 代码块在何时执行?...同时,由于类加载过程天生线程安全,所以 Kotlin object 单例活脱脱就是一个线程安全懒汉式单例(访问时初始化)。...通常我们可以在顶层文件中直接定义常量和顶层函数,但有的时候我们的确需要在类定义静态常量或函数,这样显得更加直观。这就是 伴生对象 应用场景。...再回想一下前面说过, object 其实我们可以把它理解成 定义一个类并创建一个实例 。 伴生对象仍旧符合这一语义。 在 Java 如何调用伴生对象呢?

2.6K20

Java线程安全对象发布和逸出

发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程线程安全性就很大关系。 什么是发布?...简单来说就是提供一个对象引用给作用域之外代码。比如return一个对象,或者作为参数传递到其他类方法。 什么是逸出?...如果一个类还没有构造结束就已经提供给了外部代码一个对象引用即发布了该对象,此时叫做对象逸出,对象逸出会破坏线程安全性。 概念我们知道了,可我们要关注什么地方呢?...,而是使用工厂方法,在工厂方法newInstance待构造函数执行完毕后再将对象进行发布(代码即为registenerListener注册监听)。...这实际上就是修改为了构造完毕->发布对象串行执行模式,而不是之前异步模式,这样就不会给我们带来线程安全问题。

1.1K90

Kotlin代码检查在美团探索与实践

Kotlin隐藏开销 伴生对象 伴生对象通过在类中使用companion object来创建,用来替代静态成员,类似于Java静态内部类。...所以在伴生对象声明常量是很常见做法,但如果写法不对,可能就会产生额外开销。...访问一个伴生对象私有常量字段需要经过以下方法: 调用伴生对象静态方法 调用伴生对象实例方法 调用主类静态方法 读取主类静态字段 为了访问一个常量,而多花费调用4个方法开销,这样Kotlin...对于其他类型常量,最好在它们自己主类对象而不是伴生对象来存储公共全局常量。...lazy()默认情况下会指定LazyThreadSafetyMode.SYNCHRONIZED,这可能会造成不必要线程安全开销,应该根据实际情况,指定合适model来避免不需要同步锁。

1.5K40

Better Kotlin

2 尽量地使用val val 是线程安全,并且不需要担心 null 问题,我们自然应该尽可能地使用它。...大家也要尽量避免这种情况。 3 应该好好注意一下伴生对象 伴生对象通过在类中使用 companion object 来创建,用来替代静态成员,类似于 Java 静态内部类。...所以在伴生对象声明常量是很常见做法,但如果写法不对,可能就会产生额外开销。...访问一个伴生对象私有常量字段需要经过以下方法: 调用伴生对象静态方法 调用伴生对象实例方法 调用主类静态方法 读取主类静态字段 为了访问一个常量,而多花费调用4个方法开销,这样 Kotlin...对于其他类型常量,最好在它们自己主类对象而不是伴生对象来存储公共全局常量。

1.2K20

Kotlin|这些隐藏内存陷阱,你应该熟记于心

Hi, 你好,很高兴见到你 引言 Kotlin 是一个非常 yes 语言,从 null安全 ,支持 方法扩展 与 属性扩展,到 内联方法、内联类 等,使用Kotlin变得越来越简单舒服。...伴生对象,也许真的不需要 在 Kotlin ,我们不能像 Java 一样,随便定义一个静态方法或者静态属性。此时 companion object(伴生对象)就会派上用场。...Book 类增加了一个伴生对象,其中有一个静态字段 SUM_MAX。...作用也相对直接,如果我们有某个对象或字段,我们可能只想使用时再初始化,此时就可以先声明,等到使用时再去初始化,并且这个初始化过程默认也是线程安全(不特定使用NONE)。...上述使用了 默认lazy ,即同步锁,而Android默认线程为 UI线程 ,当前操作方法又是 onCreate() ,即当前本身就是线程安全

77030

是时候使用Kotlin编程了

调用上面集合方式如下: 6,伴生对象 Kotlin没有静态属性和方法,如果我们要创建单列,可以使用Object关键字声明类。...如果要在一个类里面声明静态成员,可以在类内部使用伴生对象伴生对象使用关键字companion object。...伴生对象调用跟Java一样,通过类名.属性名称或函数名称调用。 新特性 1,空安全Kotlin对象声明分为可空引用和非空引用两种。...2,泛型 泛型存在主要是为了消除模板代码和类型转换安全, 在Kotlin泛型使用基本与Java是一致。...6.2.3 静态解析 6.2.4 扩展属性 6.2.5 扩展伴生对象 6.2.6 扩展作用域 6.2.7 类声明扩展 6.3 this表达式 6.5 小结 第7章 数据类与密封类 7.1 数据类

3.2K10

Kotlin 机制你都了解吗?

---- Kotlin 基于 Java 空指针提出了一个空安全概念,即每个属性默认不可为 null。...lazy 只能用于修饰常量 val,并且 lazy 是线程安全。 lazy 在第一次被调用时就被初始化,以后调用该属性会返回之前结果。...伴生对象总结 ---- 类似于 Java 中使用类访问静态成员语法。因为 Kotlin 取消了 static 关键字,所以 Kotlin 引入伴生对象来弥补没有静态成员不足。...可见,伴生对象主要作用就是为其所在外部类模拟静态成员。 注意: 每个类可以最多有一个半生对象; 使用 const 关键字修饰常量,类似于 Java static final修饰。...首先伴生对象代码是在类加载时就会执行。init代码块方法会按顺序放在主构造函数,主构造函数中原来代码会在后面执行。 9. const 和 val 有什么区别?

76030

Kotlin开发一些实用小技巧总结

自定义 Getters/Setters Kotlin 会自动使用 getter/setter 模型,但也有一些情况(倒 Json)我们需要用自定制 getter 和 setter。...Companion Object(伴生对象) Kotlin 是没有静态变量与方法。相对应,可以使用伴生对象伴生对象允许定义常量和方法,类似于 Java static。...Safe Typecasting(安全转换) 在 Android 需要安全类型转换。...invoke(this) 16. with 函数 with 是一个非常有用函数,它包含在 Kotlin 标准库。它接收一个对象和一个扩展函数作为它参数,然后使这个对象扩展这个函数。...有一些解决方案, Butterknife 库,可以节省很多代码,但是 Kotlin 采取另一个步骤,允许您从一个导入布局导入对视图所有引用。 例如,这个 XML 布局: <?

1.1K10

干货 | KotlinNative 异步并发模型初探

由于 Kotlin 在编程范式上吸收了部分函数式编程特性,因此 Kotlin/Native 同步方案从设计思想上向函数式编程靠拢,即对象不变性,其宗旨就是如果对象本身不可变,那就不存在线程安全问题...2.2 Worker 基本用法 下面我们来看看如何在 Kotlin/Native 开启子线程进行异步计算。...,因此在 Kotlin/Native ,单例与全局变量有着特别的规则。...: 1 0 被添加了 @ThreadLocal 注解全局变量会在每个线程维护一个单独副本,即在线程对其进行修改对于其他线程是不可见。...四、总结 在本文中我们一共体验了两套 Kotlin/Native 实现异步与并发方式,Worker-对象子图模式虽然可以确保并发安全,但是其做法较为粗暴,但目前来说 Worker-对象子图模型仍然是较为成熟一套实现异步与并发机制

1.7K20

Kotlin学习总结

不需要findviewbyid 最新版 AS build.gradle 默认引入 apply plugin: 'kotlin-android-extensions' 所以在代码中直接引用布局id...设计模式 java写项目的时候我们使用MVP模式会使用RxJava,那么Kotlin也有对应RxKotlin,同样可以使用MVP模式进行开发 单例 Kotlin单例可以采用如下方式 //私有构造 class...Test private constructor(){ //伴生对象 companion object{ //by lazy 是线程安全 val instance...:Test by lazy { Test() } } } 自定义View Java中代码里自定义View需要继承控件类并实现构造方法,在Kotlin可以使用@JvmOverLoads constructor...,IDE会自动帮我们实现好构造 好了,这是我最近对Kotlin学习一点总结,抽空看看写一个小项目,加油(ง •_•)ง

46320

《Kotin 编程思想·实战》

抽象类 7.2.1.2 接口 7.2.1.3 枚举 7.2.1.4 注解 7.2.1.5 静态类与伴生对象 7.2.1.6 sealed 密封类 7.2.1.7 data 数据类 7.2.1.8...类实例对象 7.3.1 新建对象 7.3.2 对象属性(数据结构) 7.3.3 对象行为(算法函数) 7.4 委托 7.4.1 类委托 7.4.2 属性委托 第8章 函数式编程(FP)...缺点 9.2 Kotlin与Java互操作 9.2.1 Kotlin无缝调用第三方jar库 9.2.2 执行shell 9.2.3 文件操作 9.2.4 多线程代码 9.3 Kotlin与Java...区别 9.3.1 void 与 Unit 9.3.2 反射获取类 Class 9.3.3 Java 与 Kotlin 关键字冲突处理 9.3.4 static 方法与伴生对象companion...10.2.1 类型参数 10.2.2 类型推测 10.2.3 协变与逆变 10.3 类型上下界 第11章 轻量级线程:协程(Coroutines) 11.1 协程概念 11.2 协程基本操作

1.1K10

KotlinKotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )

单例懒汉式与恶汉式 II . Java 懒汉式与恶汉式 III . Kotlin 对应 Java 懒汉式与恶汉式 IV . Kotlin 对象 ( object ) 声明 V ....Kotlin 对应 Java 懒汉式与恶汉式 ---- 1 ....Kotlin 饿汉单例模式 : Kotlin 饿汉单例模式很简单 , 一行代码即可实现 , 该行代码作用等同于上面的 Java Student 饿汉式单例模式一坨代码 ; package singleton.kotlin...Kotlin 懒汉单例模式 : 该示例涉及到了伴生对象 , 字段 getter 方法定义 , ? 和 !!...继承特征 : object 修饰单例类 , 可以继承其它类 ; 4 . object 声明单例类对象调用 : 直接使用类名 Student 调用即可 , 该类名等同于单例对象 , 调用上述单例类

63020

Kotlin初探

声明类型 函数 操作符 数组遍历及控制语句 类与枚举 扩展 代理 伴生对象 单例模式 扩展学习 1 优势 简洁 它大大减少你需要写样板代码数量。 安全 避免空指针异常等整个类错误。...2 配置 在我们AndroidStudio开发工具,要想使用Kotlin这个优秀开发语言,我们需要安装插件,直接在安装插件界面搜索Kotlin然后安装。...,Kotlin还提供了指定类型Array,ByteArray,CharArray,ShortArray,IntArray,LongArray,FloatArray,DoubleArray,BooleanArray...10 扩展 使用 11 代理 12 伴生对象 伴生对象(companion object )类似于java静态关键字static。...在Kotlin没有这个关键字,而是伴生对象,具体用法 使用的话直接People.ID。 13 单例模式 在Kotlin中使用object修饰类时候,该类是单例对象

1.6K20

Kotlin开发基础(三)

类 本篇文章主要介绍类继承,接口,复写,单例,以及object属性介绍。继承Kotlin继承方式与Java类似,Java中所有对象都继承自,而Kotlin中所有对象均继承自。...需要注意是: 数据类主构造函数至少有一个参数 主构造函数所有参数需要标记为或; 单例声明在Java写一个单例是很麻烦事情,也有很多种不通过写法,需要考虑多线程问题,但在Kotlin单例就变得简单多...对象表达式 当需要修改一个类部分功能,可以不通过显式实现一个该类子类方式来实现。在Java,通过匿名内部类来实现;在Kotlin,概括为对象表达式和对象声明。...最常见就是我们代码设置Listener。示例如下: 还有这种用法 伴生对象Kotlin没有静态属性和方法概念, Kotlin官网建议我们使用包级别的函数,来替代静态方法。...当然也可以在类内使用关键字声明一个伴生对象。 如下: 使用有很多种,可参考这篇文章。

72360

Kotlin 学习笔记(一)

是两种类型,前者修饰变量不可为 null 空值;后者加了 “?” 之后修饰变量就可以为 null 了,这也是 kotlin安全一种体现。...Kotlin 是空安全Kotlin 如果调用了 Java 代码,则需要用 ***? 类型来接收,这样可以防止空指针异常。...扩展函数 kotlin 支持给原有的类添加一些扩展功能,就是通过扩展函数来实现。可以针对第三方库对象添加一些我们需要方法。...前三种与 Java 相同,internal 表示 module 模块内部是都可以访问,而其他 module 是无法访问。 4. Kotlin 伴生对象。...可以实现静态方法和静态变量: class StringUtils { // 伴生对象 companion object { // 伴生对象实现静态变量 val

59410

从 Java 到 Kotlin,再从 Kotlin 回归 Java

这有几个原因: 名称遮蔽 类型推断 编译时空值安全 类字面量 相反类型声明 伴生对象 集合文字面量 Maybe? 不 数据类 开放类 陡峭学习曲线 ? 名称遮掩 ?...似乎Java互操作性破坏了Kotlin杀手特性——类型推断。看起来您应该显式地声明类型(T?),以满足由Java方法填充所有Kotlin变量。 ? 类字面量 ?...换句话说,你得手工输入完整变量名。 ? ? 伴生对象 ? 一个 Java 程序员来到 Kotlin 阵营。 “嗨,Kotlin。我是新来,有静态成员可用吗?”他问。 “没有。...我是面向对象,而静态成员不是面向对象,” Kotlin回答。 “好吧,但我需要用于 MyClass 日志记录器,该怎么办?” “没问题,可以使用伴生对象。” “伴生对象是什么鬼?”...“它是与类绑定一个单例对象。你可以把日志记录器放在伴生对象,” Kotlin 如此解释。 “明白了。是这样吗?” ? “对!

1.8K40

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券