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

【Android进阶】Kotlin笔记

ASDFASDF */ 被委托应该实现一个getValuesetValue方法,委托方变量不再存储值,而是由被委托提供存储功能。...泛型用于支持全部类型值。 伴生对象 Java中经常会使用静态工厂方法构造对象,这是因为静态工厂方法构造器更加适用于处理那些很多属性可以不在构造时提供。静态工厂方法更加具有可读性。...Kotlin根本没有静态这一说,Kotlin代替静态办法一个是object,一个是顶层函数。但这俩都不适用于静态工厂,因为静态工厂经常要访问私有成员。 伴生对象是用来干这些。...fun fromJson(json: String): Person{ ... } } } fun main(){ Person.Loader.fromJson() } 伴生对象也可以有扩展函数...,这是因为像上面的Loader这种伴生对象逻辑关系不大,分离到外部可以实现关注点分离。

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

【C++】继承 ⑥ ( 继承中构造函数析构函数 | 类型兼容性原则 | 父指针 指向 子类对象 | 使用 子类对象 为 父对象 进行初始化 )

地方 , 都可以使用 " 公有继承 " 派生 ( 子类 ) 对象 替代 , 该 派生 ( 子类 ) 得到了 除 构造函数 析构函数 之外 所有 成员变量 成员方法 ; 功能完整性 :..." 公有继承 " 派生 ( 子类 ) 本质上 具有 基 ( 父 ) 完整功能 , 使用 可以解决问题 , 使用 公有继承派生 都能解决 ; 特别注意 : " 保护继承 " ..." 私有继承 " 派生 , 是 不具有 基 完整功能 , 因为 最终继承 后派生 , 无法在 外部调用 父 公有成员 保护成员 ; 2、类型兼容性原则应用场景 " 类型兼容性原则..." 应用场景 : 直接使用 : 使用 子类对象 作为 父对象 使用 ; 赋值 : 将 子类对象 赋值给 父对象 ; 初始化 : 使用 子类对象 为 父对象 初始化 ; 指针 : 父指针 指向...); } 2、使用 子类对象 为 父对象 进行初始化 定义父对象 , 可以直接使用 子类对象 进行初始化操作 ; // II.

22620

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

私有构造函数 通过静态字段对外提供实例 静态代码块中直接初始化,线程安全 。 这里插播一个问题,static 代码块在何时执行?...下面来看看 伴生对象伴生对象 你可以回想一下,你在 Kotlin使用过 static 关键字吗?答案肯定是没有。...通常我们可以在顶层文件中直接定义常量顶层函数,但有的时候我们的确需要在中定义静态常量或函数,这样显得更加直观。这就是 伴生对象 应用场景。...再回想一下前面说过, object 其实我们可以把它理解成 定义一个并创建一个实例 。 伴生对象仍旧符合这一语义。 在 Java 中如何调用伴生对象呢?...伴生对象扩展方法 伴生对象也是支持扩展方法。还是以上面的 Car 为例,定义一个根据汽车品牌获取汽车类型扩展方法

2.6K20

Kotlin 之美

EJ 第1条:考虑使用静态工厂方法代替构造器 在实例化对象方式中,使用静态工厂方法相比构造器有几个好处: 工厂方法拥有名字,易于开发者理解。...Kotlin 并没有 static 关键字,也没有静态成员概念,取而代之是『伴生对象』,因此,对于第一条准则,Kotlin 使用伴生对象关键字 companion 来定义静态工厂方法,代码风格如下:...Kotlin 新增了顶层声明类别(顶层函数顶层属性,无需放在属性方法)。...public 修饰成员属性(即准则中公有域),《Effective Java》 建议这么用,取而代之是将成员属性定义成私有的,并且提供 public 修饰 set get 方法。...高阶函数 关于高阶函数定义,参考《Kotlin 实战》: 高阶函数就是以另一个函数作为参数或返回值函数 如果用 lamba 来作为高价函数参数(此时为形参),就必须先了解如何声明一个函数形参类型

2.9K20

Kotlin 机制你都了解吗?

什么是 extension(扩展函数 ---- Kotlin 可以对一个属性方法进行扩展,对被扩展代码本身不会造成任何影响。...伴生对象总结 ---- 类似于 Java 中使用访问静态成员语法。因为 Kotlin 取消了 static 关键字,所以 Kotlin 引入伴生对象来弥补没有静态成员不足。...可以使用 @JvmField @JvmStatic 类似于 Java 中调用静态属性和静态方法伴生对象可以扩展属性扩展方法。...8. init 代码块构造方法以及伴生对象中代码调用时机 ---- 创建 Person ,创建 person 对象打印方法调用时机: class Person { private var...首先伴生对象代码是在加载时就会执行。init代码块中方法会按顺序放在主构造函数中,主构造函数中原来代码会在后面执行。 9. const val 有什么区别?

76030

Kotlin学习笔记(四)-面向对象

前言 本章将讲解一些管对对象基础编程知识。如:,接口,抽象,数据扩展方法等 接口 其实这部分设计思路Java基本一致。...} 伴生对象与静态成员 kotlin 中时没有static 这种方法修饰静态方法 所以要实现 类似于java中静态属性就要用到伴生对象 例子: fun main(args: Array<String...(Latitude.TAG) } /** * 私有构造方法 companion伴生对象关键字 */ class Latitude private constructor(val latitude...伴生对象成员全局独一份 伴生对象成员类似Java静态成员 静态成员考虑用包级函数、变量替代 JvmField JvmStatic使用后,可以用相同语法在Java中调用 方法重载 与Java相同...传参数用默认值 这个方法java要调用 需要加上 @JvmOverloads否则必须传参数 扩展方法 为现有添加方法、属性: fun X.y):Z{..} val X.m 注意扩展属性不能初始化

82810

Kotlin 漫谈系列之类与继承

,我们 Kotlin 程序员也可以 new 就有对象了?。 Kotlin 构造函数分为主构造函数构造函数。主构造函数名称一起写在头部,次构造函数是写在体里面的。...伴生对象成员可通过只使用名作为限定符来调用,伴生对象成员看起来像 Java 静态成员,在运行时他们仍然是真实对象实例成员。...在 JVM 平台,如果使用 @JvmStatic 注解,你可以将伴生对象成员生成为真正静态方法字段。 不过你们方法还可以被子类重写,这个在 Java 里也不行。...伴生对象成员可通过只使用名作为限定符来调用,伴生对象成员看起来像 Java 静态成员,在运行时他们仍然是真实对象实例成员。...在 JVM 平台,如果使用 @JvmStatic 注解,你可以将伴生对象成员生成为真正 静态方法字段。更详细信息请参见Java 互操作性一节。

3.6K40

Kotlin与Java互操作

与Java一样,Kotlin在运行时不保留泛型,也就是对象携带传递到它们构造器中类型参数实际类型,即ArrayList()ArrayList()是不能区分。...包级函数 例如,在org.foo.bar 包内 example.kt 文件中声明所有的函数属性,包括扩展函数, 该 会编译成一个名为 org.foo.bar.ExampleKt Java 静态方法...静态字段 在命名对象伴生对象时,声明 Kotlin 属性会在该命名对象或包含伴生对象中包含静态幕后字段。通常这些字段是私有的,但可以通过以下方式之一暴露出来。...如果对这些函数使用@JvmStatic进行标注,那么Kotlin还可以为在命名对象伴生对象中定义函数生成静态方法。..., 使其 getter setter 方法在该对象或包含该伴生对象中是静态成员。

3.4K30

Kotlin | 4.对象接口

本章内容包括: 接口 非默认属性构造方法 数据 委托 使用 object 关键字 1、定义继承结构 /*--------------- 4.1.1 kotlin接口...* Java 方法默认是open,而 Kotlin 中默认都是final。 * 如果你想允许创建一个子类,需要使用 open 修饰符来标识这个。...this关键字调用自己另一个构造方法 class MyButton1 : View { // 委托给这个另一个构造方法 constructor...初始化语句块构造方法为初始化实例提供了灵活性 使用 field 标识符在访问器方法体中引用属性支持字段 数据提供了编译器生成 equals hashCode toString copy 其他方法...伴生对象(与包级别函数属性 起)替代了 Java 静态方法字段定义 伴生对象与其他对象一样,可以实现接口,也可以拥有有扩展函数属性 对象表达式是 Kotlin 中针对 Java 匿名内部类替代品

91510

Kotlin 与 Java 对比Kotlin 开发者社区

Kotlin 解决了一些 Java 中问题: Kotlin 通过以下措施修复了 Java 中一系列长期困扰我们问题 空引用由类型系统控制。...无原始类型 Kotlin 中数组是型变 相对于 Java SAM-转换,Kotlin 有更合适函数类型 没有通配符使用处型变 Kotlin 没有受检异常 Java 有而 Kotlin 没有的东西...受检异常 不是原生类型 静态成员 非私有化字段 通配符类型 Kotlin 有而 Java 没有的东西 Lambda 表达式 + 内联函数 = 高性能自定义控制结构 扩展函数 空安全 智能类型转换...字符串模板 属性 主构造函数 一等公民委托 变量属性类型类型推断 单例 声明处型变 & 类型投影 区间表达式 操作符重载 伴生对象 数据 分离用于只读可变集合接口 协程

49720

《Kotin 极简教程》第7章 面向对象编程(OOP)(2)《Kotlin极简教程》正式上架:

7.9.2 object对象 Kotlin中没有 静态属性方法,但是也提供了实现类似于单例功能,我们可以使用关键字 object 声明一个object对象: object AdminUser {...,匿名对象只可以用在本地私有作用域中声明类型。...fun create(): ClassB = ClassB() fun get() = "Hi, I am CompanyB" } } 我们可以直接像在Java静态使用静态方法一样使用一个伴生对象函数...另外,如果想使用Java中静态成员和静态方法的话,我们可以用: @JvmField注解:生成与该属性相同静态字段 @JvmStatic注解:在单例对象伴生对象中生成对应静态方法 7.10 sealed...PO:Persisent Object,持久对象。它们是由一组属性属性getset方法组成。PO是在持久层所使用,用来封装原始数据。

1.4K20

是时候使用Kotlin编程了

例如: 当然,也可以直接在声明时候指定构造函数对象实例化可以写new关键字。...调用上面集合方式如下: 6,伴生对象 Kotlin中没有静态属性方法,如果我们要创建单列,可以使用Object关键字声明。...如果要在一个里面声明静态成员,可以在内部使用伴生对象伴生对象使用关键字companion object。...伴生对象调用跟Java一样,通过名.属性名称或函数名称调用。 新特性 1,空安全 在Kotlin中,对象声明分为可空引用非空引用两种。...枚举扩展 6.2 扩展 6.2.1 扩展动机 6.2.2 扩展原生函数 6.2.3 静态解析 6.2.4 扩展属性 6.2.5 扩展伴生对象 6.2.6 扩展作用域 6.2.7 中声明扩展 6.3

3.2K10

Kotlin对象表达式对象声明具体使用

因此不允许将对象表达式定义成抽象对象表达式不能定义构造器。但对象表达式可以定义初始化块,可以通过初始化块来完成构造器需要完成事情。 对象表达式可以包含内部类,不能包含嵌套。...对象声明不能定义在函数方法内;但对象表达式可嵌套在其他对象声明或非内部类中。...四、伴生对象扩展 伴生对象也可以被扩展。如果一个具有伴生对象,则Kotlin允许为伴生对象扩展方法属性。..." fun main(args: Array<String ) { //使用伴生对象所在调用伴生对象方法 MyClass.output("Kotlin必须学") println(MyClass.name...为伴生对象扩展方法伴生对象扩展属性 以上就是本文全部内容,希望对大家学习有所帮助。

1.1K31

Kotlin互操作——Kotlin与Java互相调用

⑤ NoArgAllOpen 数据本身属性没有默认无参数构造方法,因此Kotlin提供一个NoArg插件,支持JPA注解,如@Entity。...与Java一样,Kotlin在运行时不保留泛型,也就是对象携带传递到它们构造器中类型参数实际类型,即ArrayList()ArrayList()是不能区分...④ 静态方法 Kotlin将包级函数表示为静态方法。如果对这些函数使用@JvmStatic进行标注,那么Kotlin还可以为在命名对象伴生对象中定义函数生成静态方法。...如果使用该注解,那么编译器既会在相应对象中生成静态方法,也会在对象自身中生成实例方法。...,使其gettersetter方法在该对象或包含该伴生对象中是静态成员。

3.7K10

Kotlin学习总结

Anko Anko是一个扩展库,提供了很多扩展方法,可以写布局、数据库、activity跳转toast等通用方法。真的超级方便!...设计模式 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

Kotlin入门(13)成员众生相

上一篇文章介绍了简单定义及其构造方式,当时为了方便观察演示结果,在示例代码构造函数中直接调用toast提示方法,但实际开发是不能这么干。...有鉴于此,本篇文章就来谈谈Kotlin如何声明成员属性成员方法,以及外部如何访问成员。...} 在内部定义成员方法,就是前几篇文章提到定义普通函数,具体参见《Kotlin入门(9)函数基本用法》Kotlin入门(10)七十二变输入参数》,这里不再赘述。...总结一下,Kotlin成员分为实例成员与静态成员两种,实例成员包括普通成员属性成员方法,其中与入参同名成员属性可以在构造函数中直接声明,外部必须通过实例才能调用实例成员。...静态成员包括静态常量与静态方法,它们都在伴生对象中定义,外部可以通过名直接使用静态成员。 点此查看Kotlin入门教程完整目录

55920

Kotlin学习日志(五)对象

,Java可以通过覆写带不同参数构造函数来实现,那么Kotlin已经在名后面指明了固定数量入参,又该如何表示拥有其他参数构造函数呢?...(2)初始化函数属性字段赋值,为了区别同名属性入参,特意给属性字段添加了this。 那么Kotlin如何精简这个代码呢?...有四种结果,我只放两个图 2.4 静态属性 之前我们伴生对象可以实现静态函数,同样也能实现静态属性,只要在伴生对象内部增加几个字段定义就行了,之前是用01表示动物雄雌,接下来用整型常量MALE表示雄性...Kotlin成员分为实例成员与静态成员,实例成员包括成员属性成员方法,其中与入参同名成员属性可以在构造函数中直接声明,外部必须通过实例才能访问成员属性成员方法静态成员包括静态属性与静态方法...抽象方法没有具体函数体,故而外部无法直接声明抽象实例,只有在子类继承时重写方法,方可使用该子类正常声明对象实例。

1K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券