详解 kotlin 相对 Java 特有的关键字及使用

文章目录

      • 1. `val` 和 `var`
      • 2. `fun`
      • 3. `when`
      • 4. `is` 和 `!is`
      • 5. `lateinit`
      • 6. `by`
      • 7. `reified`
      • 8. `companion`

本文首发地址:https://h89.cn/archives/366.html
最新更新地址:https://gitee.com/chenjim/chenjimblog

Kotlin 在兼容Java的基础上,引入了许多特有的关键字,这些关键字为Kotlin带来了简洁、高效的编程体验。以下详细介绍一些Kotlin特有的关键字及其使用:

1. valvar

  • 作用:用于声明变量。val 声明的是不可变变量(类似于Java中的 final 变量),一旦赋值后不能再更改;var 声明的是可变变量。
  • 示例
    val name: String = "John"
    // name = "Jane" // 这行代码会报错,因为val声明的变量不可变var age: Int = 30
    age = 31
    

2. fun

  • 作用:用于定义函数。与Java相比,Kotlin的函数定义语法更加简洁,参数类型在参数名之后声明。
  • 示例
    fun greet(name: String): String {return "Hello, $name!"
    }// 单表达式函数
    fun square(x: Int): Int = x * x
    

3. when

  • 作用:替代Java中的 switch - case 语句,功能更强大,不仅可以用于基本类型,还可以用于对象、范围等,并且支持更灵活的条件判断。
  • 示例
    val number = 2
    val result = when (number) {1 -> "One"2 -> "Two"else -> "Other"
    }// 使用范围匹配
    val age = 25
    val ageGroup = when (age) {in 0..12 -> "Child"in 13..19 -> "Teenager"else -> "Adult"
    }// 使用对象类型匹配
    fun describe(obj: Any): String =when (obj) {is String -> "It's a string with length ${obj.length}"is Int -> "It's an integer"else -> "I don't know what it is"}
    

4. is!is

  • 作用:用于类型检查。is 检查对象是否为指定类型,!is 则相反。
  • 示例
    fun printType(obj: Any) {if (obj is String) {println("It's a string: $obj")} else if (obj!is Int) {println("It's not an integer")}
    }
    

5. lateinit

  • 作用:用于声明一个非空类型的变量,但延迟初始化。这在变量无法在声明时初始化,但又不想使用可空类型的情况下很有用,比如在Android开发中,一些视图变量在 onCreate 方法中通过 findViewById 初始化。
  • 示例
    lateinit var myTextView: TextViewfun setupView() {myTextView = findViewById(R.id.my_text_view)myTextView.text = "Hello"
    }
    

6. by

  • 作用:用于委托属性和委托类。通过委托,一个类可以将部分功能委托给另一个类来实现,使代码更简洁、复用性更高。
  • 示例
    • 委托属性

      class User {var name: String by Delegates.notNull()
      }fun main() {val user = User()user.name = "Alice"println(user.name)
      }
      
    • 委托类

      interface MyInterface {fun doSomething()
      }class MyImplementation : MyInterface {override fun doSomething() {println("Doing something")}
      }class MyDelegator(myImplementation: MyImplementation) : MyInterface by myImplementationfun main() {val delegator = MyDelegator(MyImplementation())delegator.doSomething()
      }
      

7. reified

  • 作用:用于内联函数中,使我们能够在运行时获取泛型参数的实际类型。在Java中,泛型类型在运行时会被擦除,而 reified 关键字可以解决这个问题。
  • 示例
    inline fun <reified T> printType() {println("The type is ${T::class.simpleName}")
    }fun main() {printType<String>()
    }
    

8. companion

  • 作用:用于在类中定义伴生对象。伴生对象类似于Java中的静态成员,但功能更强大。它可以包含属性和方法,并且可以访问类的私有成员。
  • 示例
    class MyClass {private val privateValue = 42companion object {fun create(): MyClass {return MyClass()}val companionValue = 10}
    }fun main() {val myObject = MyClass.create()println(MyClass.companionValue)
    }
    

这些Kotlin特有的关键字为开发者提供了更丰富、灵活的编程方式,使得代码更加简洁、易读和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国标GB28181视频平台EasyCVR如何搭建汽车修理厂远程视频网络监控方案

一、背景分析 近年我国汽车保有量持续攀升&#xff0c;与之相伴的汽车保养维修需求也逐渐提高。随着社会经济的发展&#xff0c;消费者对汽车维修服务质量的要求越来越高&#xff0c;这使得汽车维修店的安全防范与人员管理问题面临着巨大挑战。 多数汽车维修店分布分散&#…

linux RCU技术

RCU&#xff08;Read-Copy-Update&#xff09;是Linux内核中的一种同步机制&#xff0c;用于在多核处理器环境中实现无锁读取和延迟更新。Linux RCU&#xff08;Read-Copy-Update&#xff09;技术通过一种高效的同步机制来处理并发冲突&#xff0c;确保在多核环境中读者和写者对…

【笔记ing】AI大模型-02开发环境搭建

按实验需求合理选用实例规格&#xff0c;一般&#xff1a;模型开发阶段&#xff1a;使用最低算力2U8GB CPU。训练或推理阶段&#xff1a;切换至GPU规格&#xff0c;用完及时关闭算力环境&#xff0c;且切回最低算力规格。 每次实验结束手动关闭实例。使用ModelArts公有云资源。…

Python——numpy测试题目

题目&#xff1a; 生成一个2行3列随机整数二维数组a使用Numpy方法对&#xff08;1&#xff09;中数组a进行整体求积使用Numpy方法对&#xff08;1&#xff09;中数组a进行求每列最大值索引定义一个NumPy一维数组 b&#xff0c;元素为 1 到 10 的整数获取&#xff08;4&#x…

系分论文《论面向服务开发方法在设备租赁行业的应用》

系统分析师论文系列 【摘要】 2022年5月&#xff0c;我司承接某工程机械租赁企业"智能租赁运营管理平台"建设项目&#xff0c;我作为系统分析师主导系统架构设计。该项目需整合8大类2000余台设备资产&#xff0c;覆盖全国15个区域运营中心与300家代理商&#xff0c;实…

Unity UI中的Pixels Per Unit

Pixels Per Unit在图片导入到Unity的时候&#xff0c;将图片格式设置为Sprite的情况下会出现&#xff0c;其意思是精灵中的多少像素对应世界中的一个单位&#xff0c;默认是100 1. 对于在世界坐标中 在世界坐标中&#xff0c;一般对于Sprite的应用是Sprite Renderer组件 使…

Boost Graph Library (BGL) 介绍与使用示例

Boost Graph Library (BGL) 介绍与使用示例 Boost Graph Library (BGL) 是 Boost 库中用于图论计算的模块&#xff0c;提供了处理图数据结构的通用接口和多种图算法实现。 BGL 主要特性 提供多种图表示方式&#xff1a;邻接表、邻接矩阵等包含常用图算法&#xff1a;DFS、BF…

opencv(C++)操作图像像素

文章目录 添加噪点的案例图像像素值1、访问图像属性2、像素访问方法 at灰度图像彩色图像 3、OpenCV 的向量类型4、 图像传递方式 The cv::Mat_ 类1、作用及优点2、使用 cv::Mat_ 简化像素访问 用指针扫描图像背景算法案例原理1. 图像数据存储的基本结构2、行填充&#xff08;Pa…

Python实现贪吃蛇一

贪吃蛇是一款经典的小游戏&#xff0c;最近尝试用Python实现它。先做一个基础版本实现以下目标&#xff1a; 1、做一个按钮&#xff0c;控制游戏开始 2、按Q键退出游戏 3、右上角显示一个记分牌 4、随机生成一个食物&#xff0c;蛇吃到食物后长度加一&#xff0c;得10分 5、蛇碰…

《AI大模型应知应会100篇》第13篇:大模型评测标准:如何判断一个模型的优劣

第13篇&#xff1a;大模型评测标准&#xff1a;如何判断一个模型的优劣 摘要 近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;在自然语言处理、代码生成、多模态任务等领域取得了显著进展。然而&#xff0c;随着模型数量和规模的增长&#xff0c;如何科学评估这些模…

工会考试重点内容有哪些:核心考点与备考指南

工会考试重点内容总结&#xff1a;核心考点与备考指南 工会考试主要考察考生对工会法律法规、职能职责、实务操作等内容的掌握程度&#xff0c;适用于企事业单位工会干部、社会化工会工作者等岗位的选拔。本文梳理工会考试的核心考点&#xff0c;帮助考生高效备考。 一、工会…

Verilog学习-1.模块的结构

module aoi(a,b,c,d,f);/*模块名为aoi&#xff0c;端口列表a、b、c、d、f*/ input a,b,c,d;/*模块的输入端口为a,b,c,d*/ output f;;/*模块的输出端口为f*/ wire a,b,c,d,f;/*定义信号的数据类型*/ assign f~((a&b)|(~(c&d)));/*逻辑功能描述*/ endmoduleveirlog hdl 程…

MySQL数据库备份与恢复详解

在数据库管理中&#xff0c;数据的备份与恢复是至关重要的一环。对于MySQL数据库&#xff0c;定期备份不仅能防止数据丢失&#xff0c;还能在发生故障时快速恢复数据库。本文将详细介绍MySQL数据库的备份与恢复方法&#xff0c;覆盖所有常用备份和恢复方式&#xff0c;帮助大家…

FFMPEG和opencv的编译

首先 sudo apt-get update -qq && sudo apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libmp3lame-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-de…

华为机试—最大最小路

题目 对于给定的无向无根树&#xff0c;第 i 个节点上有一个权值 wi​ 。我们定义一条简单路径是好的&#xff0c;当且仅当&#xff1a;路径上的点的点权最小值小于等于 a &#xff0c;路径上的点的点权最大值大于等于 b 。 保证给定的 a<b&#xff0c;你需要计算有多少条简…

spring cloud微服务开发中声明式服务调用详解及主流框架/解决方案对比

声明式服务调用详解 1. 核心概念 定义&#xff1a;通过配置或注解声明服务调用逻辑&#xff0c;而非手动编写客户端代码&#xff0c;提升开发效率与可维护性。核心特性&#xff1a; 解耦&#xff1a;调用逻辑与业务代码分离内置容错&#xff1a;熔断、超时、重试等动态发现&am…

基于springboot+vue的秦皇岛旅游景点管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 用户登录 旅游路…

【数据结构】之二叉树

二叉树是我们在数据结构中学到的第一个非线性结构&#xff0c;是后续学习更为复杂的树、图结构的基础。本文整理了二叉树的概念定义、基本操作、遍历算法、伪代码与代码实现以及实例说明&#xff0c;方便大家随时查找对应。 一、定义与基本术语 二叉树是一种树形结构&#xf…

Honeyview:快速浏览各类图像

Honeyview是一款免费、轻量级图片查看工具‌&#xff0c;专为快速浏览各类图像设计&#xff0c;支持Windows系统‌。其核心优势在于‌极速加载‌与‌广泛格式兼容性‌&#xff0c;可替代系统自带的图片查看工具&#xff0c;尤其适合需要处理专业图像&#xff08;如PSD、RAW&…

Streamlit性能优化:缓存与状态管理实战

目录 &#x1f4cc; 核心特性 &#x1f4cc; 运行原理 &#xff08;1&#xff09;全脚本执行 &#xff08;2&#xff09;差异更新 &#x1f4cc; 缓存机制 ❓为什么使用缓存&#xff1f; 使用st.cache_data的优化方案 缓存适用场景 使用st.session_state的优化方案 &…