没有合适的资源?快使用搜索试试~ 我知道了~
前言 在 Java 中,有个叫 SuppressWarnings 的注解,用于忽略特定的编译器警告。Kotlin 中也有一个类似功能的注解,叫做 Suppress,本文主要讲讲这个注解有什么用。 常规用法 有时候会写出这样的一些代码。这些在Kotlin编译器的眼里可能出现问题的代码,实际上却非常正确,跑起来不会出任何问题。 然后你就得到了一个编译器警告(warning),甚至是编译错误(error)。 比较常见的,比如说 unchecked cast: val some: List<*> = emptyList<Nothing>() some as List<String> // Unch
资源推荐
资源详情
资源评论
Kotlin中中Suppress的非常规用法示例的非常规用法示例
前言前言
在 Java 中,有个叫 SuppressWarnings 的注解,用于忽略特定的编译器警告。Kotlin 中也有一个类似功能的注解,叫做
Suppress,本文主要讲讲这个注解有什么用。
常规用法常规用法
有时候会写出这样的一些代码。这些在Kotlin编译器的眼里可能出现问题的代码,实际上却非常正确,跑起来不会出任何问
题。
然后你就得到了一个编译器警告(warning),甚至是编译错误(error)。
比较常见的,比如说 unchecked cast:
val some: List<*> = emptyList<Nothing>()
some as List<String> // Unchecked cast: List<*> to List<String>
然后就可以使用 Suppress 取消这个 warning:
val some: List<*> = emptyList<Nothing>()
@Suppress("UNCHECKED_CAST")
some as List<String>
再举个例子:
sealed class Base {
@Suppress("LeakingThis")
val code = calculate()
abstract fun calculate(): Int
class Derived : Base() {
override fun calculate() = 42
}
}
上面这代码并不会出现 warning 的具体说明里的问题,所以使用了 Suppress 解决这个 warning。
这是很简单的破事水,没有任何讨论的价值。
然后下面是正文。
好孩子不要模仿!很危险的!
非常规用法非常规用法
这破注释竟然能消除 error!
比如说这样的代码:
println((null as String?).length)
编译器会告诉你这样是不对的,然后向你丢出了一个 error:
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
然后就可以使用 Suppress 让编译器闭嘴!
@Suppress("UNSAFE_CALL")
println((null as String?).length)
然后就可以顺利的通过编译,编译后跑一跑,就可以轻松地拿到一个空指针异常:
Exception in thread “main” java.lang.NullPointerException
at …….
很简单,有了 Suppress,你就可以让这些可以本来通过编译器生成java字节码,但是因为各种各样的原因(例如类型安全)
被ban掉的代码,顺利通过编译。
资源评论
weixin_38678550
- 粉丝: 3
- 资源: 955
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功