[Kotlin入门] 单例、数据类、静态

Kotlin静态方法定义和调用 在习惯java的开发之后,使用kotlin进行编码,总有那么些不自然。 静态类的定义: 全局静态(实际上说单例模型) 直接将类声明为object,那么所有的函数也就静态的了,这种一般适用于各种util的类。 object UIUtil { fun toast(context:Context,msg:String){ Toast.makeText(context,msg,Toast.LENGTH_SHORT).show(); } } 在kotlin代码中调用: UIUtil.t 阅读详情

一. 数据类

1. 基础用法

data class Cellphone(val brand: String, val price: Double)

自动生成了get set hashcode equals toString等方法。通过反编译(打开AS,在Tools-Kotlin-ShowBytecode-Decompile)可以得到如下结果

public final class Cellphone {
   @NotNull
   private final String brand;
   private final double price;

   @NotNull
   public final String getBrand() {
      return this.brand;
   }

   public final double getPrice() {
      return this.price;
   }

   public Cellphone(@NotNull String brand, double price) {
      Intrinsics.checkNotNullParameter(brand, "brand");
      super();
      this.brand = brand;
      this.price = price;
   }

   @NotNull
   public final String component1() {
      return this.brand;
   }

   public final double component2() {
      return this.price;
   }

   @NotNull
   public final Cellphone copy(@NotNull String brand, double price) {
      Intrinsics.checkNotNullParameter(brand, "brand");
      return new Cellphone(brand, price);
   }

   // $FF: synthetic method
   public static Cellphone copy$default(Cellphone var0, String var1, double var2, int var4, Object var5) {
      if ((var4 & 1) != 0) {
         var1 = var0.brand;
      }

      if ((var4 & 2) != 0) {
         var2 = var0.price;
      }

      return var0.copy(var1, var2);
   }

   @NotNull
   public String toString() {
      return "Cellphone(brand=" + this.brand + ", price=" + this.price + ")";
   }

   public int hashCode() {
      String var10000 = this.brand;
      return (var10000 != null ? var10000.hashCode() : 0) * 31 + Double.hashCode(this.price);
   }

   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof Cellphone) {
            Cellphone var2 = (Cellphone)var1;
            if (Intrinsics.areEqual(this.brand, var2.brand) && Double.compare(this.price, var2.price) == 0) {
               return true;
            }
         }

         return false;
      } else {
         return true;
      }
   }
}

2. 进阶

参考文献

2.1 去除自动生成的get()/set()方法

@JvmField

2.2 更换自动生成的get、set方法名

2.3 多个构造方法

data class Child @JvmOverloads constructor(
    var age: Int,
    var name: String = ""
)

@JvmOverloads用法介绍

2.4 componentN()

二. 单例

class改成object,其他的跟java里面差不多

object Singleton {
}

三. 静态

companion object
@JvmField - 修饰静态变量
@JvmStatic - 修饰静态方法
@JvmField 和 @JvmStatic 只能写在 object 修饰的类或者 companion object 里,写法虽然有些别扭,但是效果是真的是按 static 来实现的

class BookKotlin {
    companion object {
        @JvmField
        var nameStatic: String = "BB"
        @JvmStatic
        fun speakStatic() {
        }
    }
}
手把手教你配置MAX96712解串器:从I2C地址分配到PWM帧同步 本文详细解析了MAX96712解串器在自动驾驶视觉链路中的核心配置流程。从I2C地址分配、GMSL2数据流映射到实现多摄像头精准同步的PWM帧同步触发,手把手指导工程师构建高可靠性的图像传输系统,并提供了实用的Linux调试技巧与问题排查思路。 阅读详情

相关推荐

Raptor码(一):2007RFC5053标准编解码学习

RFC 5053 标准

a_beatiful_knife的博客 3493

Kotlin 实现静态的几种方式详解

将 kotlin 编译成 java 先来个题外话,我们如何看 kotlin 对应的 java 代码,kotlin 最终还是要编译成 java class 在 JVM 上运行的,有时我们的确是想看看用 kotlin 写完的代码编译完了是什么样子,这样有助于我们理解 kotlin 语法 其实很简单,AS tools 工具里面有提供 tools -> Show kotlin Bytecode 点击 Decompile ok ,这样就行了 kotlin 实现静态的方式..

残风乱了温柔的博客 1万+

【AI生成】市面上主流自组网厂家的技术及市场研究

经过对全球自组网产业技术特征与市场格局的系统分析,本文得出以下核心结论:技术演进呈现智能化与融合化双轨路径 当前自组网技术创新已突破传统组网架构局限,形成"协议优化-架构创新-场景适配"的递进式发展路径。国际厂商聚焦智能算法应用,如Silvus采用深度学习实现动态拓扑优化,传输时延较传统方案降低37%;国内企业则侧重异构网络融合,中国移动设计院提出的5G LAN架构使工业场景通信可靠性提升至99.99%。

qq_31310977的博客 1696

Kotlin学子总结---静态类和静态方法

* Kotlin中定义静态类和静态方法 * 整个静态类: * object StaticUtil{ * fun method() * ... * } * } * 声明为 object 的类自动生产INSTANCE静态对象,类似Java中的单例. 在其他类通过StaticUtil.其方法. * 类中的部分静态方法 * class StaticUtils { * * companion object { * // 包裹范围内 属于静态方法 * fun metho.

zhanghao_Hulk的专栏 930

解决mmdet3d安装中因PyTorch高版本引发的THC.h缺失问题

本文详细分析了在安装mmdet3d时,因PyTorch版本过高导致THC.h头文件缺失的常见报错问题。文章指出该错误的本质是PyTorch 1.7+版本废弃了旧API,与老版本C++扩展代码不兼容。提供了两种核心解决方案:一是降级PyTorch至1.6及以下版本;二是修改源码,将THC.h引用替换为ATen/cuda等新头文件,并给出了具体的代码修改示例和排查技巧。

weixin_29085151的博客 379

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

这一篇文章将采用SD卡作为存储硬件,利用SPI协议与SD卡通信,完成块设备驱动开发测试。 SD卡可以更加形象的表示块设备开发过程,明白硬件如何交互,完成数据读写。

2603

Kotlin 静态类,静态方法

整个静态类: object StaticUtil{ fun method() ... } 类中的部分静态方法 class StaticUtils { companion object {// 包裹范围内 属于静态方法 fun method() ... } } 全局静态 直接新建一个 Kotlin file

发强 3万+

GEE高阶应用——如何绘制2000-2022年土地利用变化轨迹时序图

土地利用变化是指在一定时间范围内,土地利用类型和结构发生的变化。时序变化是指这种变化随时间的推移而发生的序列变化。土地利用变化轨迹的时序变化具体介绍如下:首先,土地利用变化轨迹的时序变化体现在土地利用类型的演变上。在过去的几十年里,随着人口的增加、经济的发展和城市化的推进,土地利用类型发生了显著的变化。传统的农田逐渐减少,而城市、工业、交通、居住等用地的面积不断扩大。同时,随着环境保护意识的提高,生态保护用地、森林、湿地等绿色用地的面积也在增加。

此星光明博客 1113

Kotlin 静态内部类单例模式的正确实现方式

最近在整理基础库的时候,需要一个基础类来存储初始化的数据,例如应用的 Application Context,用户的登录 token 等等信息,这些基本都是应用全局类的信息,在应用的整个生命周期都会用到,因此我将这个基础类设计为单例模式来优化性能。Easy,类的静态属性和静态代码块,会在类加载的初始化阶段赋值和执行,但类的静态方法不会呀,把单例作为静态方法的返回值就可以完美地让单例懒加载了。喔,看着挺简单的,看看有没其他实现,陆续点击第二条第三条搜索内容,发现一整页的静态内部类单例都是返回这样的结果。

鸿蒙的技术博客 1954

深入浅出讲解外部服务提供者 OAuth 2.0 帐户客户端创建与 ABAP 系统集成

本文详细介绍了在SAP ABAP平台配置OAuth 2.0客户端以安全调用外部Web服务的完整流程。主要内容包括:首先需要在外部服务提供者平台注册OAuth客户端,获取client ID和client secret;其次需特别注意重定向URI必须是公开可访问的地址;然后在ABAP系统中通过事务码OA2C_CONFIG配置OAuth客户端信息;最后阐述了常见的错误排查方法。文章强调了OAuth 2.0作为SAP系统与外部服务安全集成的标准协议,正确配置客户端是确保后续API调用安全可靠的关键前提。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1734

AI时代的软件质量保证新方法论

3.2.1 质量保证的方法论 质量保证(Quality Assurance, QA)是一种系统化的方法,用于确保产品或服务符合预定的质量标准。在AI时代,软件质量保证的方法论需要适应不断变化的AI技术和应用场景。 3.2.1.1 质量管理体系的构建 首先,构建一个完善

AI天才研究院 1351

Kotlin学习手记——单例,大厂内部资料

companion object { @JvmField var x: Int = 2 @JvmStatic fun y(){ } } } 注意,加的注解@JvmField和@JvmStatic只针对java平台的可用,其他平台并不可行。 单例的object类仍可以继承类: object Singleton: Runnable{ override fun run() { } } 内部类: 在kotlin中类内部的class前面不写修饰符默认就是静态内部类,class前面写 inner修饰符才是java中

305

【ARMv9 DSU-120 系列 1 -- DSU-120 DynamIQ 概述】

ARMv9架构中的DynamIQ™ Shared Unit-120(简称DSU-120)为一组基于Cortex-A类架构的核心提供了共享的L3内存系统、窥探控制(snoop control)和 过滤(filtering) 以及其他支持集群运作的控制逻辑。这个集群被称为DSU-120 DynamIQ™集群。此外,所有连接到片上系统(SoC)的外部接口也都是通过DSU-120提供的。一个DSU-120 DynamIQ™集群可以包含1到14个核心,且同一集群中可包含多达三种不同类型的核心。

CodingCos的博客 1185

Kotlin学习手记——单例、内部类、数据类、枚举类、密封类、内联类

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。不断奔跑,你就知道学习的意义所在!

2401_84408092的博客 1420

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Kotlin零基础入门到精通(精选)

Kotlin从入门到精通一. Kotlin课程概述1.1 课程安排:1.2 什么是Kotlin?1.3 Kotlin的发展历程1.4 学习目标1.5 必备知识1.6 参考资料1.7 Hello,world二. 数据类型2.1 本章目标2.2 Boolean类型2.3 Number类型2.4 Char类型2.5 类与对象2.6 空类型和智能类型转换2.7 包2.8 区间2.9 数组三. 程序结构3.1 常量与变量3.2 函数3.3 Lambda表达式 一. Kotlin课程概述 1.1 课程安排: 课程介绍

暗余的博客 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Kotlin入门,一篇文章就够了

Android为啥要从Java转向Kotlin Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。苹果公司已经在用Swift语言替代Object-C语言,Google也找到了替代Java的语言,也就是JetBrains公司(Android Studio也是用该公司的Intelli J改的)主推的Kotlin。现在将kotlin作为了编写Android的官方语言,而后会有越来越多的项目使用Kot.

zhangmiaoping23的专栏 4063

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Kotlin(八) 数据类、单例

和Java的不同,kotlin的数据类比较简单,New→Kotlin File/Class,在弹出的对话框中输入“Book”,创建类型选择“Data”。单例模式,是最常用、最基础的设计模式之一,它可以用于避免创建重复的对象。关键字时,就表明你希望这个类是一个数据类,Kotlin会根据主构造函数中的参数帮你将。虽然看上去像是静态方法的调用,但其实Kotlin在背后自动帮我们创建了一个。可以看到,在Kotlin中我们不需要私有化构造函数,也不需要提供。另外,当一个类中没有任何代码时,还可以将尾部的大括号省略。

陌生人 618

kotlin 静态内部类_kotlin面向对象(学习笔记二)

二、面向对象1、类以及接口 1、 属性没有默认值必须赋值。成员是默认全局可见。 2、可带有属性和默认方法的接口我们在给接口添加新的方法的时候,之前继承过该接口的类则不需要实现新添加的方法接口中的属性其实是使用方法来实现的,所以不能给默认值,如果要给默认值可以通过方法来实现interface Car{ val speed:Int get()=100} 在...

weixin_34902464的博客 2686

八、Kotlin基础学习:1、数据类;2、单例;3、伴生对象;4、密封类;

Kotlin基础学习:1、数据类;2、单例;3、伴生对象;4、密封类;

weixin_43936741的博客 393
上一篇: [Kotlin入门] 基础语法
下一篇: 【Android 消息机制】 Handler
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值