[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() {
        }
    }
}
从“Hello World”到区域赛银牌:我的ACM算法打怪升级全记录(附各阶段工具包) 本文记录了作者从编程新手到ACM区域赛银牌获得者的完整学习历程,详细分享了各阶段的算法学习路线、刷题策略和实战经验。涵盖从基础算法到动态规划的系统训练方法,并附赠经过竞赛检验的工具包和资源清单,为算法竞赛爱好者提供实用参考。 阅读详情

相关推荐

DeepMD-kit描述子机制解析:从原子坐标到不变性特征

本文深入解析DeepMD-kit描述子机制,详细阐述如何将原子坐标转换为具有平移、旋转和排列不变性的特征表示。探讨了se_e2_a、se_e3等不同描述子的适用场景及性能优化技巧,帮助读者掌握这一关键技术在分子模拟中的应用实践。

weixin_42520661的博客 340

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

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

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

Maven

是一款自动化构建工具,专注于Java项目的构建、依赖的管理。

weixin_58738870的博客 2163

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

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

zhanghao_Hulk的专栏 930

避坑指南:WSL2网络模式修改导致无法上网的解决方案(附备份还原技巧)

本文深入解析WSL2默认网络隔离机制,并提供三种安全的端口互通方案,重点推荐通过配置Windows防火墙规则实现稳定访问。同时,针对网络配置修改可能引发的无法上网问题,给出了从重置配置到系统级备份的完整恢复指南,确保开发环境安全可靠。

jj890的博客 781

隐语第四课:快速上手-SecretFlow的安装和部署

隐语课程,继续学习隐私计算技术

weixin_41467180的博客 2509

Kotlin 静态类,静态方法

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

发强 3万+

FreeCAD MCP实战:用AI自然语言驱动CAD建模与自动化

在计算机辅助设计(CAD)领域,参数化建模和自动化脚本是提升设计效率的核心技术。其原理在于通过程序化指令控制三维模型的创建与修改,从而将设计意图转化为精确的几何实体。这种技术价值在于显著降低重复性操作成本,实现快速原型迭代和设计探索。在应用场景上,它尤其适用于需要频繁调整尺寸、生成系列化零件或执行规则化建模任务的工程与产品设计。本文聚焦的FreeCAD MCP项目,正是这一理念的先进实践。它通过集成Model Context Protocol(MCP),构建了一个连接Claude AI与FreeCAD的智能

weixin_26913055的博客 724

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

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

鸿蒙的技术博客 1954

VisionPro九点标定实战:从相机拍照到机器人精准抓取的完整流程

本文详细介绍了VisionPro九点标定技术在工业自动化中的应用,从相机拍照到机器人精准抓取的完整流程。通过硬件配置、标定步骤和实战技巧的解析,帮助工程师实现高精度视觉引导系统,提升生产效率。特别适合需要解决二维图像坐标与物理空间转换问题的自动化项目。

weixin_30664051的博客 406

YOLOv11改进策略【注意力机制篇】| SE、CBAM、ECA、CA、Swin Transformer等注意力机制全面解析与应用

本文详细介绍了五种主流的注意力机制及其在YOLOv11中的应用。通过合理的模块选择和位置部署,注意力机制能够显著提升目标检测性能。

QQ_778132974的博客 875

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

告别调参难!YOLO超参数优化指南(网格搜索+贝叶斯优化实战)

YOLO超参数优化的本质,不是“试遍所有参数”,而是“用工具化方法,在场景约束内找到最优平衡”——网格搜索稳、贝叶斯优化快,两者结合(先粗搜再精调)是工业场景的最优解。先定范围:基于工业场景(小目标/边缘设备/多类别)缩小参数搜索范围,避免无效探索。先调核心:优先优化数据增强、学习率、输入尺寸,这些参数对精度影响最大。工具赋能:用网格搜索+贝叶斯优化替代人工试错,再用TensorBoard监控,让调参“有据可依”。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 698

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

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

2401_84408092的博客 1420

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

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

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、付费专栏及课程。

余额充值