Kotlin新手入坑:访问修饰符,数据类,单例类,密封类.._..ST

访问修饰符,数据类,单例类,密封类

抓住今天,尽可能少的信赖明天。 喝汤能补 (* ^ ▽ ^ *)

前言

  该文章作为学习交流,如有错误欢迎各位大佬指正 (* ^ ▽ ^ *)

  • 自身技能
    (1)已具备计算机的基本知识
  • 本文简介
    主要讲解:变量,类的访问权限修饰符;kotlin中特有的数据类和密封类;以及设计模式中的单例类。

可见性修饰符

  kotlin中,四种修饰符:public、private、protected 和 internal ,这些修饰符直接加在fun关键字前即可。
java与kotlin修复符的对比

修饰符javakotlin
public所有类可见所有类可见(默认)
private当前类可见当前类可见
protected当前类、子类、同一包路径下的类可见当前类,子类可见
default同一包路径下的类可见(默认)
internal同一模块中的类可见

数据类

  我们与数据库,服务器进行交互时,需要将它们包含的数据映射到内存中,为编程逻辑提供数据模型的支持。
  数据类通常要重写equals(),hashCode(),toString()这几个方法。

  • equals() 判断两个数据类是否相等。
  • hashCode() 作为equals的配套方法,进行重写(否则导致HashMap、HashSet等 -hash相关系统类无法正常使用)。
  • toString() 将会数据类中的所有的字段以及值通过字符串形式拼接到一起,提供清晰的输入日志,方便快速查看字段的值是否正确。若该方法未重写,则默认打印的就是内存地址。

语法 data关键字
  数据类,会根据主构造函数中的参数将equls(),toString()等方法自动生成。当一个类中没有代码时,可以省略尾部的大括号。

一个登录类

data class Login(val name: String, val pawss: String)

fun main() {
    val login = Login("aa","aaa")
    val login1 = Login("aa","aaa")
    println(login)
    println(" ? "+ (login == login1))
}

运行结果
Login(name=aa, pawss=aaa)
 ? true

单例类

单例指的就是设计模式中单例模式,用于避免创建重复的对象。
  语法 object 类名
  虽然使用方式与静态方法调用相似,但实际上,Kotlin自动帮我们创建了一个实例,并保证全局只会存在一个实例。

object Singleton {
    fun test(){
        println(" singleton test! ")
    }
}

使用
    Singleton.test()

密封类

   语法关键字,密封类的作用是,指定子类的类型为特定的几种class,其子类是有限的class。

  • 密封类及其所有子类只能定义在同一个文件的顶层位置(.kt文件),不能嵌套在其他类中,这时密封类底层的实现机制所限制的。

简单的使用例子:如果我们定义一个Result.kt的接口,在定义一个 getResultMsg方法。这里因为kotlin语法,我们需要编写一个else让代码通过编译,虽然知道没有这种情况发生。假如后面,扩展了Result接口,增加了一个Unknow类,也是继承Result的,那么如果没有更新when语句的代码,则会抛出异常。
   这里我们将接口关键字,换成sealed class,这时kotlin会自动根据子类的限制,强制要求将所有的子类条件处理完,即可无需编写else分支。如果增加Unknown类,该when语句出也会报错,必须增加Unknown的条件分支才能编译过。

interface Result 
class Success(val msg: String): Result
class Failure(val error: Exception): Result


fun getResultMsg(result: Result) = when(result){
    is Success ->result.msg
    is Failure ->result.error.message
    else -> throw IllegalAccessException()
}
sealed class Result
class Success(val msg: String): Result()
class Failure(val error: Exception): Result()


fun getResultMsg(result: Result) = when(result){
    is Success ->result.msg
    is Failure ->result.error.message
}

(* ^ ▽ ^ *)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值