当前位置: 首页 > news >正文

佛山南海建设局网站汉中做网站的公司电话

佛山南海建设局网站,汉中做网站的公司电话,快闪ppt模板免费下载,最新裁员公司名单目录 一 Kotlin安全性1.1 可空类型1.2 安全调用运算符1.3 Elvis 运算符1.4 非空断言运算符1.5 安全类型转换1.6 延迟初始化 一 Kotlin安全性 Kotlin 在设计时采用了一系列策略#xff0c;旨在尽可能地减少空指针异常#xff08;NullPointerException#xff09;的出现。空指… 目录 一 Kotlin安全性1.1 可空类型1.2 安全调用运算符1.3 Elvis 运算符1.4 非空断言运算符1.5 安全类型转换1.6 延迟初始化 一 Kotlin安全性 Kotlin 在设计时采用了一系列策略旨在尽可能地减少空指针异常NullPointerException的出现。空指针异常是许多编程语言中常见的错误之一Kotlin 通过以下几种方式来避免它 可空类型Nullable TypesKotlin引入了可空类型的概念允许变量具有可以存储空值的能力。在 Kotlin 中如果一个变量可能为 null必须显式地声明为可空类型。例如使用 String? 表示一个可能为null的字符串类型。这样做可以在编译时就捕捉到潜在的空指针异常因为 Kotlin 不允许直接对可空类型进行操作除非先进行非空判断或者安全调用。安全调用运算符Safe Call Operator在 Kotlin 中可以使用 ?. 运算符来调用可空对象的方法或访问其属性。如果对象为 null则整个表达式将返回 null 而不会导致空指针异常。例如obj?.someMethod() 将返回 null如果 obj 是 null否则调用 someMethod() 方法。Elvis 运算符Elvis OperatorElvis 运算符 ?: 可以用于提供默认值如果表达式的值为 null则可以返回提供的默认值。例如val length str?.length ?: 0 表示如果 str 是 nulllength 将赋值为 0。非空断言运算符Non-null Assertion Operator有时候我们可以确定某个可空类型的变量在某个地方不会为 null这时可以使用非空断言运算符 !! 来显式地告诉编译器该变量不会为 null。但是需要小心使用它如果变量为 null将会触发空指针异常。安全类型转换Safe Cast使用 as? 运算符进行安全类型转换如果转换失败则返回 null。这样可以避免在类型转换时出现空指针异常。延迟初始化在 Kotlin 中类的属性可以使用 lateinit 延迟初始化这使得在声明属性时不需要立即初始化而可以在稍后进行初始化。但是要小心使用延迟初始化必须确保在使用该属性之前已经初始化否则会抛出异常。 1.1 可空类型 在 Kotlin 中可空类型Nullable Types允许变量具有可以存储 null 值的能力。通常变量的类型不能为 null如果试图将 null 赋值给非空类型的变量编译器会报错。但是有时候我们需要表示一个变量可能为 null 的情况这就是可空类型的用途。 在 Kotlin 中声明可空类型的变量时在类型名称后面添加一个问号 ? 来表示该变量可以为 null。例如String? 表示一个可能为 null 的字符串类型Int? 表示一个可能为 null 的整数类型。 以下是一些可空类型的示例 fun main() {var name: String? John // 可以为 null 的字符串var age: Int? null // 可以为 null 的整数val nullableList: ListInt? listOf(1, 2, 3) // 可以为 null 的整数列表// 当然我们也可以使用非空类型的列表val nonNullableList: ListInt listOf(1, 2, 3) }在使用可空类型时需要特别注意处理可能为 null 的情况以避免空指针异常。Kotlin 提供了多种方式来处理可空类型的变量 安全调用操作符 ?.允许在不确定变量是否为 null 的情况下调用其方法或访问其属性。如果变量为 null则整个表达式会返回 null。 val length name?.length // 如果 name 不为 null则返回 name 的长度否则返回 nullElvis 操作符 ?:用于在表达式为 null 时提供默认值。 val nonNullName name ?: Unknown // 如果 name 不为 null则使用 name 的值否则使用 Unknown安全类型转换 as?用于安全地进行类型转换如果转换失败则返回 null。 val intValue: Int? stringValue as? Int // 如果 stringValue 可以转换为 Int则返回 Int 值否则返回 null通过使用可空类型和相应的操作符我们可以在编译时处理潜在的 null 值避免空指针异常并使得代码更加健壮和安全。 val str: String? null val length str.length // 编译错误str 可能为 nulllet 函数可以用于在非空的情况下执行某些操作例如 val str: String? null str?.let {// str 不为 null 时执行println(it.length) }optional 函数可以用于在可空类型的变量为 null 时执行某些操作例如 val str: String? null str.optional {// str 为 null 时执行println(str is null) }1.2 安全调用运算符 在 Kotlin 中安全调用运算符Safe Call Operator是一种用于处理可空类型的特殊运算符。它允许你在不确定一个可空类型变量是否为 null 的情况下安全地调用它的方法或访问它的属性。如果变量为 null那么整个表达式会返回 null而不会导致空指针异常。 安全调用运算符的语法是 ?.它用于在可空类型变量后面调用其方法或访问其属性。以下是使用安全调用运算符的示例 fun printLength(name: String?) {val length name?.lengthprintln(Length of name: $length) }fun main() {printLength(John) // 输出: Length of name: 4printLength(null) // 输出: Length of name: null }在上面的示例中我们定义了一个名为 printLength 的函数它接受一个可空类型的字符串 name 作为参数。在函数中我们使用安全调用运算符 name?.length 来获取 name 字符串的长度如果 name 是 null则整个表达式会返回 null否则返回字符串的长度。这样在处理可空类型时就不需要手动进行 null 检查可以避免空指针异常。 安全调用运算符在处理链式调用时尤为有用。例如如果我们有一个可空类型的对象 person它有一个可空类型的属性 address并且 address 有一个可空类型的属性 city我们可以通过链式使用安全调用运算符来避免多层嵌套的 null 检查 val city person?.address?.city上面的代码会在 person、address 或 city 中任何一个为 null 时返回 null而不会抛出空指针异常。 通过使用安全调用运算符我们可以更加简洁和安全地处理可空类型的变量减少了大量的 null 检查代码提高了代码的可读性和健壮性。 1.3 Elvis 运算符 在 Kotlin 中Elvis 运算符 ?: 是一种用于处理可空类型的特殊运算符。它提供了一种简洁的方式来为可能为 null 的表达式提供一个默认值。如果表达式的值为 null那么 Elvis 运算符会返回指定的默认值否则返回表达式的值。 Elvis 运算符的语法是 expression ?: defaultValue其中 expression 是一个可能为 null 的表达式defaultValue 是一个默认值用于在 expression 为 null 时返回。 以下是使用 Elvis 运算符的示例 fun printLength(name: String?) {val length name?.length ?: -1println(Length of name: $length) }fun main() {printLength(John) // 输出: Length of name: 4printLength(null) // 输出: Length of name: -1 }在上面的示例中我们定义了一个名为 printLength 的函数它接受一个可空类型的字符串 name 作为参数。在函数中我们使用 Elvis 运算符 name?.length ?: -1 来获取 name 字符串的长度如果 name 是 null则整个表达式会返回 -1否则返回字符串的长度。这样我们可以指定一个默认值 -1以避免 name 为 null 时导致的空指针异常。 Elvis 运算符还可以用于链式调用中的多个可空类型变量 val city person?.address?.city ?: Unknown在上面的代码中如果 person、address 或 city 中任何一个为 null都会返回 “Unknown” 作为默认值。 通过使用 Elvis 运算符我们可以更加简洁地处理可空类型的变量并在需要时为其提供默认值使得代码更加健壮和安全。 1.4 非空断言运算符 在 Kotlin 中非空断言运算符 !! 是一种用于处理可空类型的特殊运算符。它用于显式地告诉编译器一个可空类型的变量不会为 null从而允许在变量为 null 的情况下进行非空操作。 非空断言运算符的语法是 expression!!其中 expression 是一个可空类型的变量。如果 expression 不为 null那么 expression!! 会返回它的值但如果 expression 为 null那么在运行时会抛出 NullPointerException。 需要注意的是非空断言运算符 !! 是一种危险的操作。如果使用不当会导致空指针异常因此应该谨慎使用。通常情况下最好避免使用 !!而是使用安全调用运算符 ?. 或 Elvis 运算符 ?: 来处理可空类型的变量。 以下是使用非空断言运算符的示例 fun printLength(name: String?) {val length name!!.lengthprintln(Length of name: $length) }fun main() {printLength(John) // 输出: Length of name: 4printLength(null) // 抛出 NullPointerException }在上面的示例中我们定义了一个名为 printLength 的函数它接受一个可空类型的字符串 name 作为参数。在函数中我们使用非空断言运算符 name!!.length 来获取 name 字符串的长度。如果 name 是 null则在运行时会抛出 NullPointerException。 尽管非空断言运算符 !! 可以在某些情况下方便地处理可空类型的变量但它应该谨慎使用并且只在你能确保变量不会为 null 的情况下使用。通常情况下推荐使用更安全的操作符来处理可空类型以避免潜在的空指针异常。 1.5 安全类型转换 在 Kotlin 中安全类型转换Safe Cast是一种用于处理类型转换的特殊操作符。它允许你安全地将一个对象转换为指定类型如果转换失败则返回 null而不会抛出 ClassCastException 异常。 安全类型转换的语法是 as?它用于将一个对象转换为指定类型并返回转换后的对象。如果转换失败则整个表达式会返回 null。 以下是使用安全类型转换的示例 fun printLength(name: Any) {val length (name as? String)?.lengthprintln(Length of name: $length) }fun main() {printLength(John) // 输出: Length of name: 4printLength(42) // 输出: Length of name: null }在上面的示例中我们定义了一个名为 printLength 的函数它接受一个 Any 类型的参数 name。在函数中我们首先使用 as? 运算符将 name 对象安全地转换为 String 类型。如果 name 是 String 类型则转换成功我们可以获取它的长度并打印如果 name 不是 String 类型则转换失败整个表达式会返回 null。 在 main 函数中我们分别调用了 printLength(“John”) 和 printLength(42)。第一个调用中name 是一个字符串转换成功打印字符串的长度。第二个调用中name 是一个整数转换失败返回 null。 安全类型转换可以帮助我们处理不确定对象类型的情况而不会出现 ClassCastException 异常。它是一种安全而方便的方式来进行类型转换特别在处理多态类型的对象时很有用。 1.6 延迟初始化 在 Kotlin 中延迟初始化Late Initialization是一种允许在声明属性时不立即初始化的特性。在某些情况下我们希望在稍后的时间点才对属性进行初始化例如在构造函数执行之后或在对象创建之后。 为了实现延迟初始化我们需要在属性声明中使用 lateinit 关键字并将属性的类型设置为非空类型不可为 null。这样编译器会知道该属性会在稍后被初始化而不会在初始化阶段要求立即赋值。 以下是一个简单的示例演示了如何在 Kotlin 中使用延迟初始化 class Person {lateinit var name: Stringlateinit var age: Intfun init(name: String, age: Int) {this.name namethis.age age} }fun main() {val person Person()person.init(Alice, 30)println(Name: ${person.name})println(Age: ${person.age}) }在上面的示例中我们定义了一个 Person 类其中的 name 和 age 属性使用了延迟初始化。我们在类的 init 方法中进行属性的初始化。因为属性使用了 lateinit 关键字所以在创建 Person 对象时并不需要立即为 name 和 age 赋值。相反我们可以在稍后的时间点通过调用 init 方法来为它们赋值。 需要注意的是使用 lateinit 的属性必须是非空类型并且必须在对象的生命周期内进行初始化否则会抛出 UninitializedPropertyAccessException 异常。因此使用延迟初始化时要确保在使用属性之前已经进行了初始化。 延迟初始化非常有用可以在某些情况下优化对象的创建和初始化过程避免不必要的资源消耗并提高代码的性能。但是要小心使用它确保在适当的时间点对属性进行初始化。
http://www.yutouwan.com/news/418253/

相关文章:

  • 网站服务器不稳定怎么打开网页怎么在网站上添加地图
  • 网站设计师联盟申请域名
  • 宁波奉化建设局网站最全的网站大全
  • 管理系统网站模板昆明做网站要多少钱
  • 网站建设实训报告心得体会wordpress 作者标签
  • 购物网站前台功能lamp wordpress 一键安装
  • 宁夏建设工程质量安全监督总网站wordpress手机编辑器插件下载
  • 哪些人需要建网站wordpress 家庭照片
  • mvc中手把手做网站wordpress杂志主题nana
  • pc 网站开发设计网络推广网上营销
  • 西安谁家的集团门户网站建设比较好网站运营需要多少钱
  • 电商网站后台惠州seo网络推广
  • 用jquery做网站成都网站优化seo
  • 太原企业自助建站网站产品详情用哪个软件做的
  • 招聘网站建设方案模板有个网站经常换域名
  • 广州企业网站建设哪家好建个短视频网站
  • 网站建设合同审批公司网站建设多少钱需要
  • 福州网站建设哪家强微信小程序与网站连接
  • 麦积区城乡建设局网站wordpress 站中站
  • 四川建设网官方网站wordpress静态化配置
  • 天津企业建站系统慈溪电商网站建设公司
  • 深圳建设交易信息网站wordpress社区插件
  • 深圳网站建设龙华新科洛阳网站搭建
  • dw网站建设的数据库中国肩章
  • 大庆市城乡建设局网站首页如何做网站的优化
  • 网站建设廴金手指花总壹柒织梦cms怎么安装
  • 建设网站的拓扑图濮阳网站关键词
  • 案例学 网页设计与网站建设网站建设先做后
  • 网站的建设需要多少钱phpcms和帝国cms哪个好
  • 商会信息平台网站建设方案微信公众号创建要钱吗