我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Kotlin定义其他类的实现详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Kotlin定义其他类的实现详解

1.嵌套类

如果一个类只对另外一个类有作用,那么可以将其嵌入到该类中,使两个类在一起。和Java中定义的内部类很像。

class Computer {
    class Mouse(val name:String){
        fun showDescribe(){
            println("mouse name is $name")
        }
    }
}
fun main() {
    val mouse = Computer.Mouse("Logitech")
    //可以通过嵌套类的实例,访问其定义的属性和函数
    mouse.showDescribe()
    println(mouse.name)
}

2.数据类

顾名思义,数据类是专门用来存储数据的。

1)数据类的声明,通过在class前加data修饰,就可以将一个普通类定义为一个数据类。

2)数据类提供了toString,equals和hashCode的自定义实现。

3)==默认比较的是对象的引用。但是==用来比较数据类,比较的是他们的内容。

4)数据类默认支持解构。因为kotlin编译器实现了解构声明。

//用data关键字修饰class,就可以定义一个数据类
data class MotionEvent(var x: Int, var y: Int) {
}
fun main() {
    //打印数据类对象,默认会调用toString方法。
    val e1 = MotionEvent(10, 10)
    val e2 = MotionEvent(10, 10)
    println(e1)
    println(e1.toString())
    //数据类的==是判断的equals方法,比较的是内容,而不是对象引用。
    println(e1 == e2)
    //数据类支持解构
    val (x, y) = e1
    println("$x,$y")
}

打印结果:

10
MotionEvent(x=10, y=10)
MotionEvent(x=10, y=10)
true
10,10

通过反编,看下kotlin对数据类的默认实现。

public final class MotionEvent {
   private int x;
   private int y;
   public final int getX() {
      return this.x;
   }
   public final void setX(int var1) {
      this.x = var1;
   }
   public final int getY() {
      return this.y;
   }
   public final void setY(int var1) {
      this.y = var1;
   }
   public MotionEvent(int x, int y) {
      this.x = x;
      this.y = y;
   }
   //解构声明
   public final int component1() {
      return this.x;
   }
   //解构声明
   public final int component2() {
      return this.y;
   }
    //默认实现了toString
   public String toString() {
      return "MotionEvent(x=" + this.x + ", y=" + this.y + ")";
   }
    //默认实现了hashCode
    public int hashCode() {
      return Integer.hashCode(this.x) * 31 + Integer.hashCode(this.y);
   }
   //默认实现了equals方法,比较的是两个对象数据的值。
   public boolean equals(@Nullable Object var1) {
      if (this != var1) {
         if (var1 instanceof MotionEvent) {
            MotionEvent var2 = (MotionEvent)var1;
            if (this.x == var2.x && this.y == var2.y) {
               return true;
            }
         }
         return false;
      } else {
         return true;
      }
   }
}

3.定义数据类的必须满足的条件

1)数据类必须至少有一个参数的主构造函数。

2)数据类的主构造函数定义的参数必须是val或var修饰。

3)数据类用data关键字修饰,但是不能使用abstract、open、sealed、inner修饰。

4.解构声明

解构声明的实现原理,就是声明Component1、Component2等若干个组件函数,让每个函数返回一个熟悉数据。如果定义的是一个数据类,kotlin编译器会自动为每个属性声明Component函数。

自定义解构声明:

通过operator fun component1() 。从定义可以看出来解构声明,是一种特殊的函数。

class Student(val name: String,val age:Int){
    operator fun component1() = name
    operator fun component2() = age
}
fun main() {
    val student = Student("HanMei",18)
    val (name: String, age: kotlin.Int) = student
    println("$name,$age")
}

5.枚举类enum class

其实枚举就是一个类,kotlin定义的枚举用enum class,来强调枚举也是一个类。而java中只用enum修饰,就可以定义一个类。所以,在java中,枚举是一个类的概念就不太深入。

enum class Week() {
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY;
    fun getDay(): String {
        return when (this) {
            SUNDAY -> "星期天"
            MONDAY -> "星期一"
            TUESDAY -> "星期二"
            WEDNESDAY -> "星期三"
            THURSDAY -> "星期四"
            FRIDAY -> "星期五"
            SATURDAY -> "星期六"
        }
    }
}
fun main() {
    println(Week.SUNDAY)
    println(Week.SUNDAY.getDay())
}

6.运算符重载

可以通过operator fun plus 对“+”运算符进行重载。

data class MotionEvent(var x: Int, var y: Int) {
    operator fun plus(e1: MotionEvent) = MotionEvent(x + e1.x, y + e1.y)
}
fun main() {
    val e1 = MotionEvent(10, 10)
    val e2 = MotionEvent(10, 10)
    println(e1+e2)
}

打印结果:
MotionEvent(x=20, y=20)

到此这篇关于Kotlin定义其他类的实现详解的文章就介绍到这了,更多相关Kotlin定义其他类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Kotlin定义其他类的实现详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Kotlin引用其他xml的view对象过程详解

这篇文章主要介绍了Kotlin中如何引用其他xml中的view对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
2023-02-16

Kotlin 的注解类详解及实例

Kotlin 的注解类详解及实例注解声明注解是将元数据附加到代码的方法。要声明注解,请将 annotation 修饰符放在类的前面:annotation class Fancy
2023-05-31

Java自定义类加载器实现类隔离详解

由于每种组件的不同版本所依赖的jar包不同,我们可以借鉴tomcat的实现方式,通过自定义类加载器打破双亲委派机制来实现类隔离,从而达到操作多组件多版本的目的。本文就来和大家详细聊聊实现方法
2023-03-02

Android xmlns 的作用及其自定义实例详解

Android xmlns 的作用及其自定义实例详解 xmlns:Android="http://schemas.android.com/apk/res/android的作用是:这个是xml的命名空间,有了他,你就可以alt+/作为提示,
2023-05-31

详解如何实现一个Kotlin函数类型

这篇文章主要为大家详细介绍了如何实现一个Kotlin函数类型,文中的实现方法讲解详细,具有一定的借鉴价值,需要的小伙伴可以跟随小编一起学习一下
2022-11-13

Android自定义LocationMarker的实现详解

这篇文章主要为大家详细介绍一个比较简单的东西:自定义绘制Marker其实就是自定义view,跟轨迹没太多关联,感兴趣的小伙伴可以跟随小编一起了解一下
2023-02-10

Kotlin注解与反射的定义及创建使用详解

这篇文章主要为大家介绍了Kotlin注解与反射的定义及使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-08

Python实现自定义包的实例详解

这篇文章主要介绍了实现自定义包的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-29

详解Python中类的定义与使用

类顾名思义,就是一类事物、或者叫做实例,它用来描述具有共同特征的一类事物。我们在python中声明类的关键词是class,类还有功能和属性,属性就是这类事物的特征,而功能就是它能做什么,也是就是方法或者函数。我们仍然用例子来说明问题。目标:
2022-06-04

Pytorch自定义CNN网络实现猫狗分类详解过程

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它不仅能够实现强大的GPU加速,同时还支持动态神经网络。本文将介绍PyTorch自定义CNN网络实现猫狗分类,感兴趣的可以学习一下
2022-12-08

基于 Kotlin 实现一个简单的 TCP 自定义协议

想要成为一名优秀的Android开发,你需要一份完备的 知识体系,在这里,让我们一起成长为自己所想的那样~。
基于 Kotlin 实现一个简单的 TCP 自定义协议
2024-04-23

Java自定义实现链队列详解

一、写在前面 数据结构中的队列应该是比较熟悉的了,就是先进先出,因为有序故得名队列,就如同排队嘛,在对尾插入新的节点,在对首删除节点.jdk集合框架也是提供也一个Queue的接口.这个接口代表一个队列.顺序队列:ArrayBl
2023-05-30

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录