美文网首页
as? 安全的类型转换

as? 安全的类型转换

作者: Sarah_love | 来源:发表于2020-07-08 12:56 被阅读0次

原文链接:https://blog.csdn.net/u011489043/java/article/details/95175506

————————————————

fun <T : View> getView(@IdRes viewId: Int): T {

    var view = mViews?.get(viewId)

    if (view == null) {

        view = mConvertView?.findViewById(viewId)

        mViews?.put(viewId, view)

    }

    return view as T

}

/// 调用举例

fun setText(@IdRes viewId: Int, text: String) {

    val textView: TextView = getView(viewId)

    textView.text = text

}

显然,第四行可能返回 null,所以第7行就可能抛出异常,于是针对 as 操作符进行了调研。

一、“不安全的” 类型转换操作符

如果类型转换不成功,类型转换操作符通常会抛出一个异常。因此,我们称之为 不安全的(unsafe)。在 Kotlin 中,不安全的类型转换使用中缀操作符 as

val y = null

val x: String = y as String

// 输出

1

2

3

注意 null 不能被转换为 String,因为这个类型不是 可为 null 的(nullable),也就是说,如果 y 为 null,上例中的代码将抛出一个异常。为了实现与 Java 相同的类型转换,我们需要在类型转换操作符的右侧使用可为 null 的类型,比如:

val y = null

val x: String? = y as String?

println("x = $x")  // x = null

上述代码,表示允许 String 可空,这样当 y = null 时,不会抛异常;但是,当类型转换失败时,还是会崩溃,如下:

val y = 66

val x: String? = y as String?

二、“安全的” (nullable) 类型转换操作

为了避免抛出异常,你可以使用 安全的 类型转换操作符 as?,当类型转换失败时,它会返回 null,但不会抛出异常崩溃:

val y = 66

val x: String? = y as? String

println("x = $x")  // x = null

val y = null

val x: String? = y as? String

println("x = $x")  // x = null

————————————————

原文链接:https://blog.csdn.net/u011489043/java/article/details/95175506

相关文章

  • C++中的类型转换函数

    基础类型转换 标准数据类型之间会进行隐式的类型安全转换 转换规则如下:(char -> short)-> int ...

  • Go语言类型转换和类型断言

    Go语言的类型转换和类型断言: 类型转换在编译期完成,包括强制转换和隐式转换 类型断言在运行时确定,包括安全类型断...

  • as? 安全的类型转换

    原文链接:https://blog.csdn.net/u011489043/java/article/detail...

  • C#魔灵-lesson_04-数据转换

    类型转换分以下两种 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。 显式类型...

  • table进阶--自定义cell

    原单元格 as 类型转换,从一个类型转换到另一个类型as! 强制转换,失败app会崩溃as? 安全转换,失败了不...

  • golang进阶之路

    类型转换 go语言提供了一种在不同但是相互兼容的类型之间相互转换的方式,并且这种转换非常安全。非数值类型之间的转换...

  • C# 类型转换

    隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的...

  • 类型安全转换函数

    在项目开发测试的过程中甚至上线后,程序的崩溃都是必然的,而类型转换引起的崩溃次数也是不在少数,常见的就包括类型转换...

  • swift中 类型转换

    在使用类型转换时,需要使用as?或者as!方式。as?是一种比较安全的转换方式,其会将类型转换后的结果映射为Opt...

  • swift基本特性小结

    类型安全 swift是类型安全的编程语言,值永远不会被隐式转换为其他类型。例如两个实例做相加操作,值类型必须相等,...

网友评论

      本文标题:as? 安全的类型转换

      本文链接:https://www.haomeiwen.com/subject/epzqcktx.html